请注意,我不使用Interface Builder。
我制作了子视图__weak
,以便在他们引用的对象被解除分配时,它们会在iOS 5上自动归零。这意味着我不必在viewDidUnload
手动将它们归零(这似乎是最安全的模式)。
然而,因为它们很弱我不能直接将它们分配给我的ivars alloc
,或者ARC立即释放它们,我发现的唯一解决方案就是分配给一个临时的强大局部变量,如下所示:
UIView *strongTmp = [[UIView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:strongTmp];
weakIVar = strongtmp;
这很难看,如果没有冗长的评论,其目的不会立即显现出来。我想要一些(更多)优雅的东西:
[self.view addSubview:weakIVar = [[UIView alloc] initWithFrame:self.view.bounds]];
但这会生成相同的编译器警告(该对象将在分配后立即释放)。
有什么建议吗?提前谢谢。
答案 0 :(得分:1)
'赋值给局部变量'技术是完全正常的。只要习惯它,或使用笔尖。
答案 1 :(得分:0)
一个(非理想的)解决方案是在相关类别上添加一个类级别的初始化程序,这有效地告诉ARC返回你的东西的自动发布版本,这里有一个带有UIView的例子:
@implementation UIView (mxcl)
+ (id)viewWithFrame:(CGRect)frame {
return [[self alloc] initWithFrame:frame];
}
@end
weakIVar = [UIView viewWithFrame:self.view.bounds];
[self.view addSubview:weakIVar];
注意:你可以在任何UIView子类上调用它,前提是子类的指定初始化程序仍然是initWithFrame。
注意,我相信我几个月前测试了这个,但是没有明确测试上面的代码,如果上面的例子需要修改,请发表评论。