переменная должна быть сохранена или нет? iphone-SDK - PullRequest
0 голосов
/ 19 марта 2010

в следующем фрагменте кода, который я получил из книги.

NSString * pPath, который определен в классе как переменная экземпляра.

@interface MainViewController : UIViewController {
    NSString *pPath;
}

В реализации после установки она сохраняется. Я предполагаю, что при присваивании объект автоматически сохраняется (потому что это строка NSString) и нет необходимости дополнительно его сохранять.

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

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

     [pPath retain]; 
} 

1 Ответ

3 голосов
/ 19 марта 2010

Да, вам нужно сохранить переменную pPath, если вы получите ее таким образом. Однако это еще не конец истории - вам также нужно сбросить предыдущее значение, иначе оно просто утечет.

Для упрощения вы можете использовать свойства target-c, которые позволяют автоматически генерировать методы установки / получения с желаемым поведением управления памятью:

// 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=... будет вызываться автоматически сгенерированный метод установки, который:

  1. Выпустит ранее установленное значение pPath
  2. Назначит новое значение pPath и сохранит его

Вам также необходимо освободить переменную pPath в методе dealloc:

-(void) dealloc{
  [pPath release];
  //or
  self.pPath = nil;
  [super dealloc];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...