2010-03-19 37 views
0

在我從書中得到的以下代碼片段中。應該保留還是不變? iphone-sdk

在類中定義爲實例變量的NSString * pPath。

@interface MainViewController : UIViewController { 
    NSString *pPath; 
} 

在設置後的實現中它被保留。我假定在賦值時對象會自動保留(因爲它是一個NSString),並且不需要額外保留它。

- (void) initPrefsFilePath { 
    NSString *documentsDirectory = 
    [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 

    pPath = [documentsDirectory stringByAppendingPathComponent: 
      @"flippingprefs.plist"]; 

    [pPath retain]; 
} 

回答

3

是的,你需要保留你的pPath變量,如果你這樣獲得它。然而,這不是故事的結束 - 你還需要釋放其先前的價值,否則它只會泄漏。

爲了方便起見,你可以使用Objective-C的屬性,讓您自動生成所需的內存管理行爲的setter/getter方法:

// header 
@interface MainViewController : UIViewController { 
    NSString *pPath; 
} 
@property (nonatomic, retain) NSString* pPath; 

// implementation 

@synthesize pPath; 

- (void) initPrefsFilePath { 
    NSString *documentsDirectory = 
    [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 

    self.pPath = [documentsDirectory stringByAppendingPathComponent: 
      @"flippingprefs.plist"]; 
} 
self.pPath=...線自動生成setter方法

這裏將調用其:

  1. 將釋放先前設定的PPATH值
  2. 將分配新的值PPATH並保留它

您還需要釋放你的PPATH變量dealloc方法:

-(void) dealloc{ 
    [pPath release]; 
    //or 
    self.pPath = nil; 
    [super dealloc]; 
} 
相關問題