我有一个像这样定义的属性:
@property (nonatomic, retain) MyClass *someObject;
我目前正在使用此作业声明:
someObject = [[MyClass alloc] init];
就内存管理而言是上述赋值语句,相当于:
self.someObject = [[[MyClass alloc] init] autorelease];
假设@synthesize someObject;
位于@implementation
部分。我也没有使用ARC。
答案 0 :(得分:1)
注意:以下内容基于原始帖子的EDITED版本,其中“assign”已替换为“retain”---
是的,这两者是“等价的”,因为它们都会导致保留MyClass对象(正确),并在属性中保留计数为1。第二个版本会进行一些额外的工作,这可能会也可能不会成为问题,具体取决于您对性能的敏感程度。
有些人认为你不应该在类中使用属性引用(即self.propname
),而是引用实例变量,尤其是初始化和释放。其他人则认为恰恰相反。我一般都喜欢使用属性引用,除非在初始化期间(如本例所示)使用它可能会导致无关的保留/自动释放。