2011-12-19 41 views
1

请注意,我是而不是使用Interface Builder的在ARC下创建__weak UIViewController子视图的简明代码

我已经做了我的子视图__weak,以便它们在ARC 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

嘿布拉德/马克斯,你找到了这个问题的答案?我只是在几个地方遇到过这种情况,而且确实相当丑陋和烦人。 – SaamJB 2013-01-03 04:57:36

回答

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。

请注意,我相信我在几个月前测试了这个,但是没有明确测试上面的代码,请评论上面的例子是否需要修改。

相关问题