【问题标题】:can't map single object (UIView, UIGesture) with two other objects (UIView)?不能将单个对象(UIView、UIGesture)与其他两个对象(UIView)映射?
【发布时间】: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


【解决方案1】:

不同之处在于addSubview 会在将其添加到新视图之前自动从其超级视图中删除一个视图(请参阅类参考:http://developer.apple.com/library/ios/ipad/#documentation/uikit/reference/uiview_class/uiview/uiview.html),而一个数组将很乐意接受一个对象,即使它在另一个数组中.

如果您需要这样做,您可以创建标签的副本并将其放置在其他视图中。

【讨论】:

    猜你喜欢
    • 2021-08-16
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 2016-10-02
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多