- (NSString *) instanceMethod - PullRequest
       6

- (NSString *) instanceMethod

1 голос
/ 06 октября 2010

Уважаемые разработчики iPhone, у меня есть экземпляр метода, который предназначен для возврата строки

- (NSString *)newFile:(NSString *)inFile andFileNumber:(NSInteger)aNumber {
    return [NSString stringWithFormat:@"%@.o%i",inFile,aNumber];
}

Я называю этот метод как

outputFileName = [self newFile:inputFileName andFileNumber:newNumber];
// where inputFileName is a string and newNumber is an integer 
// outputFileName (also a string), inputFileName and newNumber are declared in
// the interface and in the implementation

Когда я компилирую проект с помощью Analyzer,он выдает следующие сообщения:

  1. Метод возвращает объект Objective-C с счетом сохранения +0 (ссылка не принадлежит)
  2. Объект возвращается вызывающей стороне с +0 (не-owning) retain count
  3. Объект с +0 retain count возвращается вызывающей стороне, где ожидается +1 (владение) retain count

Также, когда он пытается освободить outputFileName, происходит сбой приложения,У кого-нибудь есть подсказка, что происходит не так?Заранее спасибо.

Ответы [ 3 ]

8 голосов
/ 06 октября 2010

Проблема в предположении об условности.В частности, статический анализатор предполагает, что любой метод, который начинается с new, возвращает сохраненный объект.Это потому, что системные API следуют этому соглашению.

Переименуйте ваш метод;fileNameWithBase:fileNumber: приходит на ум.

1 голос
/ 06 октября 2010

Ваш метод начинается с «new», когда анализатор предполагает, что вы хотите вернуть объект со счетом удержания +1.Измените имя метода, и предупреждения должны исчезнуть.

Также: метод возвращает объект с автоматическим освобождением;Вы не должны выпускать это самостоятельно.

0 голосов
/ 06 октября 2010

Вы возвращаете автоматически выпущенную строку.Если вы отправляете ему дополнительное сообщение -release или -autorelease, ваше приложение будет аварийно завершать работу при следующей попытке доступа к этой строке.

Вы должны уделить время чтению раздела «Управление памятью»документации разработчика Apple.

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