【问题标题】:Objective-C propertyObjective-C 属性
【发布时间】:2011-06-10 21:33:40
【问题描述】:

我正在开发一个 Iphone 应用程序。我从一本关于声明如下属性的书中读到:

@property (nonatomic, retain) NSArray *listData;

那么在实现文件中,dealloc方法中,一定要写上这样的:

[listData release];

我想知道我是否声明为

@property NSArray *listData;

我必须释放它吗?它会为我节省 1 行代码。

【问题讨论】:

  • 我会坚持保留+释放。我认为编译器可能会抱怨您没有在属性中指定保留/分配位;即使没有,大多数时候,assign 并不是你真正想要的。
  • 是的,编译器发出警告,没有指定的东西,使用了assign。好的,所以对于财产,我将使用保留+释放。但是对于私有变量,我不会为它们创建属性。我需要释放私有变量吗? TIA
  • 经过一番阅读,我现在明白了,cmiiw: 1. copy 用于 NSString * 2. 对于其他对象,使用 retain 3. 两者都必须在 dealloc 方法中释放 4. 对于原始数据类型, assign 使用,无需释放

标签: iphone properties retain


【解决方案1】:

是的,你必须释放它。保留限定符意味着当您设置属性时,您的类将调用 NSArray 上的保留。当你的课结束后,你需要释放你保留的任何东西,否则你有内存泄漏。

【讨论】:

  • 嗨,明白。但是如果我不使用retain,我需要释放它吗?不使用retain会不会有问题?
  • 看来你没有得到文森特的问题。
【解决方案2】:
@property NSArray *listData;

只会隐式声明 listData 的访问器和修改器方法,

但是内存管理呢(就 iphone 应用程序开发而言,这是一件严肃的事情)?

如果你要在实现中使用它,那么你应该在 dealloc 方法中释放它

也可以参考Official Apple docs for @property

【讨论】:

    猜你喜欢
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2012-08-18
    相关资源
    最近更新 更多