【发布时间】:2012-05-14 16:02:26
【问题描述】:
我有些困惑。不是我面临的真正的错误或问题。我想知道一些事情,但我不确定这是适合这类问题的地方,但这是我的问题:
参考我的Question Here,我试图将单个手势映射到两个视图上。
现在我很想知道为什么这不起作用?我继续进行基础知识,如果我有任何 NSObject 子类,可以说NSString 并在NSMutableArray 中添加如下:
NSString *strTest = @"Test String";
[aryTest1 addObject:strTest];
[aryTest2 addObject:strTest];
字符串被添加到两个数组中。现在我正在做的是创建一个标签,为标签设置标签并在两个视图中添加如下:
UILabel *lblTemp = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 20)];
[lblTemp setTag:1];
[lblTemp setText:@"Label"];
[vw1 addSubview:lblTemp];
[vw2 addSubview:lblTemp];
现在每个视图都有一个子视图数组。当我们尝试在该视图的子视图中添加一个对象时,为什么在两个视图中都没有添加这个对象? 我得到的结果是我的第二个视图显示了标签,但第一个视图没有标签。
如果我注释我的代码的最后一行并且不在 vw2 中添加标签,标签将添加到 vw1 中。而不是我尝试了不同的东西。
UILabel *lblTemp = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 20)];
[lblTemp setTag:1];
NSMutableArray ary1 = [[NSMutableArray alloc] init];
NSMutableArray ary2 = [[NSMutableArray alloc] init];
[ary1 addObject:lblTemp];
[ary2 addObject:lblTemp];
两个数组的计数均为 1。这意味着我在数组中添加了标签。之后,我尝试在视图中添加数组的对象,而不是遇到问题。标签仅在第二个视图中添加:
[vw1 addSubview:[ary1 objectAtIndex:0]];
[vw2 addSubview:[ary2 objectAtIndex:0]];
当我在初始化后打印标签的retainCount时,每次retaincount为1时添加array1和array2。所以我认为数组没有保留同一个对象的引用。它是一个复制到数组中的新对象。为什么标签没有被添加到同一个视图中?
对象添加到任何视图的子视图的实际内部过程是什么。据我所知,子视图是一个数组类型,而不是发生了什么?谁能解释一下?
提前致谢
【问题讨论】:
-
retainCount 没用。不要叫它。
-
我知道..我只是打电话给它知道如果我在数组中添加任何对象,内存中是否会发生任何事情..答案是否定的。
标签: iphone memory-management uiview uikit