2012-03-20 145 views
0

我有一個MyObject。當我的程序運行時,我創建一個新的MyObject初始化方法

self.myObject = [[MyObject alloc] initWithStuff:stuff]; 

以後在我的代碼中,我需要創建一個新的MyObject。

我的問題是,我需要用「init」方法創建一個新的MyObject嗎?

.h 
#import <UIKit/UIKit.h> 

@interface MyObject : NSObject 
{} 

-(id)initWithStuff:(NSString *)stuff; 
-(id)initWithNewStuff:(NSString *)newStuff; 

-(id)newObjectWithStuff:(NSString *)newStuff; 

@end 

.m 

-(id)initWithStuff:(NSString *)stuff; 
{ 
    if (self = [super init]) 
    { 
     self.myStuff = stuff; 
    } 
    return self; 
} 

-(id)initWithNewStuff:(NSString *)newStuff;{ 
    if (self = [super init]) 
    { 
     self.myStuff = newStuff; 
    } 
    return self; 
} 

-(id)newObjectWithStuff:(NSString *)newStuff; 
{ 
    self.myStuff = newStuff; 

    return self; 
} 

或者我可以使用非初始化方法來創建它嗎?

在我的代碼:

self.myObject = [[MyObject alloc] initWithNewStuff:newStuff]; 

self.myObject = [self.myObject newObjectWithStuff:newStuff]; 

我想我的問題歸結爲:這是什麼

if (self = [super init]) 

嗎?

使用其他對象如字典,我知道「NSDictionary * myDict = myOtherDict」是完全有效的。

回答

0

,只要你想你可以命名您的自定義初始化,但有一個慣例,開始你的初始化方法與「初始化」。

在您編寫的示例中,對象是所有層次結構的根類的NSObject的子類。關鍵字super引用了層次結構中上面的類(您的類的超類),所以基本上,您調用的方法是,該方法在爲內存分配內存後立即創建並初始化對象(這就是alloc方法所做的) 。然後,檢查該方法是否返回對象並初始化您自己的屬性。

看看這個指南,並確保你瞭解那裏的所有內容https://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/introduction/introobjectivec.html

0

當你調用

self.myObject = [self.myObject newObjectWithStuff:newStuff]; 

你只是讓在現有的存儲位置的參考。如果你真的想要一個新的對象,你應該調用像

self.myObject = [[MyObject alloc] initWithNewStuff:newStuff]; 

的頁頭關鍵字分配內存變量