2012-02-14 45 views
0

我以前写在标题变量不使用的特性:代码重写为在Objective-C ARC摆脱@property的ARC之前

@interface MyViewController : UIViewController { 
    NSString *prop1; 
} 
@end 

然后在.m文件我用保留/释放:

-(void)initVar { 
    prop = @"initialized variable"; 
    [prop retain]; 
} 

-(void)dealloc{ 
    [prop release]; 
} 

在尝试过ARC一段时间后,我得到了很多内存管理问题,在某种意义上说,许多对象被释放。我通过将ivar移动到@property并使用点符号找到了最快(但很脏)的解决方案。

我后来添加了readonly属性,因为没有必要访问控制器外部。 我的问题是,在ARC环境中,我如何重写上面的代码来ged摆脱@property,特别是我关心的是视图控制器,他们可以在应用程序的生命期间多次获取alloc/dealloc。

回答

2

老实说,你的问题和你的伪代码没有多大意义。在ARC下,伊娃将是一个强大的对象[默认情况下],因此,与该伊娃相关的分配将像其他所有ARC对象一样进行管理。如果你没有ARC编译,它不会。

您是否使用ivars或属性代码是一个样式问题,与内存管理无关[在ARC下 - 您需要手动管理ivar引用]。

您的初始化程序示例和-dealloc在您的问题中都是错误的,但这可能只是因为它们是快速笔记而不是真正的代码。

如果你在ARC下有内存管理问题,听起来像其他事情出了问题。你有没有尝试构建和分析?你确定你打开ARC的所有文件? (注意,我已经使用了ARC很长一段时间了,一般来说,这只是一种“正常工作”的体验。除了几个编译器错误和脆弱的边界之外,我还没有遇到任何严重的问题NS和CF代码之间)。

+0

是的,它只是快速的代码。为什么dealloc与非弧编译器错误?我同意这是一个风格问题,这就是为什么我想删除所有@prop。所以,据我了解,在ARC头文件中声明var时,应该让我的内存管理安全吗? – Leonardo 2012-02-14 07:51:04