2011-04-28 54 views
3

例如:我是否需要保留传递给自定义initWith方法的参数?

@property(retain) NSObject* anObject; 

接口, 在implemetation:

-(id)initWithAnotherObject:(NSObject*)another{ 
    if(self = [super init]){ 
     anObject = another; //should this be anObject = [another retain]? 
    } 
    return self; 
} 
+0

如果你在你的代码示例有'NSObject',你真的需要'NSObject的*'。 Objective-C对象总是按引用传递,但与Java不同,你必须通过使用指向“NSObject”的指针明确地告诉编译器。 – JeremyP 2011-04-28 08:54:25

+0

哦,这是一个错字,谢谢。 – CarmeloS 2011-04-28 10:16:59

回答

6

是的,因为你不能保证 '另一个' 寿命将是相同的寿命

接口

您创建的对象需要确保将其保留在init方法中(并且不要忘记使用dealloc方法释放它)。所以下面是正确的:

... 
if(self = [super init]){ 
    anObject = [another retain]; 
} 
... 

一两件事 - 通过定义anObject保持耐久性你说你把该对象的所有权,因此你必须在dealloc方法中释放它。如果在init方法中不保留'another'参数,它最终会被释放(dealloc或者setter方法)而不被保留 - 所以你的应用程序可能会因为EXEC_BAD_ACCESS错误而崩溃。

2

我认为这是一个很好的做法做

self.anObject = another; 

,但它是相同的

+0

它是不一样的,通过使用自己,你正在调用可以被合成为保留的二传手。 – 2011-08-02 20:33:36

相关问题