第一次在这里问一个问题。
我有一个问题,我已将UIImageView
添加为UIButton
的子视图,使用buttonWithType:
声明(这意味着我无需向右发布按钮) ?)但我还是要发布我UIButton
的子视图吗?
代码位:
UIImage *circleImage = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"item-circle" ofType: @"png"]];
UIImageView *circleImageView = [[[UIImageView alloc] initWithImage: circleImage] autorelease];
[imageView setFrame: CGRectMake(-5, -5, 65, 65)];
UIButton *button = [UIButton buttonWithType: UIButtonTypeCustom];
[button addSubview: circleImageView];
答案 0 :(得分:0)
简答:
您的代码似乎很好。基本的经验法则是,对于每个alloc
,new
,retain
或copy
,您需要release
或autorelease
。< / p>
长答案:
让我们逐行完成您的代码。
UIImage *circleImage = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"item-circle" ofType: @"png"]];
第一行使用便捷方法。您不需要在任何内容上调用发布,因为您尚未调用alloc
,new
,retain
或copy
。
UIImageView *circleImageView = [[[UIImageView alloc] initWithImage: circleImage] autorelease];
在第二行,您拨打alloc
,然后拨打autoerelease
,这样就可以了。
[imageView setFrame: CGRectMake(-5, -5, 65, 65)];
同样,没有alloc
,new
,retain
或copy
。
UIButton *button = [UIButton buttonWithType: UIButtonTypeCustom];
再次,你使用了一种方便的方法。
[button addSubview: circleImageView];
您仍未拨打alloc
,new
,retain
或copy
。因此,您不要拨打release
或autorelease
。
答案 1 :(得分:0)
作为一般规则,您需要释放alloc
或retain
自己的任何内容。但是你在这里(实质上)通过调用autorelease
来做到这一点。如果您询问是否需要再次发布子视图,答案是否定的。
这同样适用于您的按钮。您尚未拨打alloc
或retain
(而是使用了buttonWithType
),因此您无需在其上调用release
。