2011-08-05 62 views
3

問題創建對象 - Objective-C的

我試圖創建在Objective-C的對象。我知道如何去做,但我有幾個關於實現文件中的方法的問題。

的對象:

@interface Program : NSObject { 
    NSString *sid; 
    NSString *le; 
    NSString *sd; 
    NSString *pid; 
    NSString *n; 
    NSString *d; 
    NSString *url; 
} 

@property (nonatomic, retain) NSString *sid; 
@property (nonatomic, retain) NSString *le; 
@property (nonatomic, retain) NSString *sd; 
@property (nonatomic, retain) NSString *pid; 
@property (nonatomic, retain) NSString *n; 
@property (nonatomic, retain) NSString *d; 
@property (nonatomic, retain) NSString *url; 

@end 

問題

我應該只實現deallocinit ..我說的對這個?

而且,我也沒有特別的初始化,所以我應該保持默認init方法如下?

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     // Initialization code here. 
    } 

    return self; 
} 
+5

你確定要保留NSStrings嗎?如果保留的對象實際上是一個NSMutableString,它可以從你下面改變。我發現很少'保留'NSString屬性;我通常會「複製」它們。 – Richard

+0

同意。我讀過的所有內容都表示要使用NSStrings的副本。 –

+0

沒錯,我總是忘了!非常感謝! – darksky

回答

5

您需要合成的屬性被釋放,如果你不需要任何定製的初始化,那麼你可以保持init方法,因爲它是。實際上這裏沒有必要實施init。但在dealloc您需要釋放字符串。

@implementation Program 

@synthesize sid; 
// ... synthesize others 

- (void)dealloc { 
    [sid release]; 
    // ... release others 

    [super dealloc]; 
} 

@end 
3

我可能是錯的,我敢肯定有人會糾正我),但如果你沒有做任何特殊的初始化,你不需要init方法。

+1

你不錯':)' –

0

你只需要實現- dealloc- init,如果你有拆除或安裝程序做。如果您沒有,則無需執行任何操作,因爲從NSObject繼承的默認值可以完成這項工作。

1

我應該只實現的dealloc和init ..我說的對這個?

您還需要實現所有這些屬性,但可以通過@synthesize使編譯器做所有的辛勤工作荷蘭國際集團他們。

每個屬性需要您-dealloc

0

您確實需要執行dealloc並釋放所有的ivars。另外,別忘了@合成你的財產!

1

如果要創建一個屬性(你應該綜合所以編譯器會自動爲我們生成getter和setter方法),如果你正在做的自定義初始化,那麼你需要記住自己的關鍵字

-(id)init{ 
    self.sid = @"SID" //Without the self object & the dot we are no longer sending 
        //an object a message but directly accessing ivar named sid 
} 

- (void)dealloc { 
    self.sid = nil; 
    [super dealloc]; 
    }