2013-03-26 22 views
0

對不起我的英語...關於NSObject的釋放

在 「.h」 頭文件

NSString *_name; 

在 「.M」 文件

-(id)init{ 

..... 

_name = [[NSString alloc] initWithString:@"Hadrian"]; 

..... 

} 

和功能用這個來改變_name的值:

-(void) changeName:(NSString *)name{ 

    //No 1: 

    _name = [name copy]; 

    //No 2: 

    if(_name) [_name release]; 

    _name = [name copy]; 

} 

沒有1導致泄漏?如何編寫這個功能標準?

+0

爲什麼不使用@property/@synthesize? – apascual 2013-03-26 09:54:34

回答

0

建議...

  • @property和@synthesize:如果您使用@財產/ @合成,的getter/setter方法是通過 交給他們處理。你不需要處理它。 (使用功能,而不必長期 代碼)

    看也Inject IOS

    • 屬性回答強制執行訪問限制(如只讀)
    • 屬性加強的內存管理策略(挽留,分配)
    • 屬性(很少)用作線程安全策略的一部分(原子)
    • 屬性提供了透明地實現自定義制定者和獲得者。
    • 通過單一方式訪問實例變量可以提高代碼的可讀性。
  • 命名約定:避免_前綴的變量名,以避免自動生成的訪問衝突。要不就得合成如圖所示,在此link by Kelan

  • 泄漏解釋 :您擁有的對象,當你的alloc的對象,或創建一個副本。這意味着您給予的對象保留計數爲1(不是 自動釋放)。你有責任,當你使用該物件時,你應該釋放它。