Как я протекаю NSString в этом случае? - PullRequest
0 голосов
/ 26 июня 2011

У меня есть табличное представление, в котором есть строка в последней строке.

@interface MyTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
{
    NSString *loadingMessage;   
}
@property (retain) NSString *loadingMessage;
@synthesize loadingMessage;

- (UITableViewCell *)tableView:(UITableView *)pTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//some stuff...
        cell.textLabel.text = loadingMessage;
}

Затем, когда произойдет какое-либо событие, я буду изменять сообщение загрузки:

-(void)requestFailed:(NSError*)error {
    self.loadingMessage = [NSString stringWithFormat:@"Failed with error: %@", error];
}

В соответствии синструменты Я пропускаю строку loadingMessage здесь ... Но я не понимаю, почему.Я думал, что счетчик stringWithFormat равен +0, а установщик равен +1.Я освобождаю строку, когда делаю это тоже.Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 26 июня 2011

Код, который вы разместили, верен.Действительно, stringWithFormat возвращает объект с автоматическим освобождением, поэтому вы можете назначить его непосредственно сохраненному свойству.

Таким образом, либо вы выполняете какое-то другое присваивание в своем коде, либо, что более вероятно, вы не освобождаете loadingMessage в вашем dealloc.

Просто гипотеза.

0 голосов
/ 26 июня 2011

Серхио прав, в коде нет ничего плохого, но я обнаружил, что строковые свойства нужно копировать, а не сохранять.

Попробуйте

@property (copy,readwrite) NSString *loadingMessage;

Может остановить утечку

...