基本的Objective-C内存管理语法

时间:2012-09-26 15:37:48

标签: objective-c memory-management variable-assignment

我有一个像这样定义的属性:

@property (nonatomic, retain) MyClass *someObject;

我目前正在使用此作业声明:

someObject = [[MyClass alloc] init];

内存管理而言是上述赋值语句,相当于:

self.someObject = [[[MyClass alloc] init] autorelease];

假设@synthesize someObject;位于@implementation部分。我也没有使用ARC。

1 个答案:

答案 0 :(得分:1)

注意:以下内容基于原始帖子的EDITED版本,其中“assign”已替换为“retain”---

是的,这两者是“等价的”,因为它们都会导致保留MyClass对象(正确),并在属性中保留计数为1。第二个版本会进行一些额外的工作,这可能会也可能不会成为问题,具体取决于您对性能的敏感程度。

有些人认为你不应该在类中使用属​​性引用(即self.propname),而是引用实例变量,尤其是初始化和释放。其他人则认为恰恰相反。我一般都喜欢使用属性引用,除非在初始化期间(如本例所示)使用它可能会导致无关的保留/自动释放。