0

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

@property (nonatomic, retain) MyClass *someObject;

我目前正在使用这个赋值语句:

someObject = [[MyClass alloc] init];

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

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

假设@synthesize someObject;@implementation节中。另外我没有使用ARC。

4

1 回答 1

1

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

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

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

于 2012-09-26T16:45:06.310 回答