2015-03-20 4 views
1

Я использую стороннюю библиотеку и вызываю одну из ее функций, подобных этому.[NSError сохранить]: сообщение отправлено на освобожденный экземпляр

NSError* error = nil; 
self.updatedDocument.bookmarkParser.bookmarks = newBookmarks; 
//save the document 
[self.updatedDocument.bookmarkParser saveBookmarksWithError:&error]; 
[self.updatedDocument saveAnnotationsWithError:&error]; 

Файл стороннего apis .h выглядит следующим образом.

/// Saves the bookmark into a plist file at bookmarkPath. 
/// @note Saving is done async. 
- (BOOL)saveBookmarksWithError:(NSError *__autoreleasing*)error; 

Я не уверен, если я правильно используя этот указатель NSError как я не уверен, что * __ autoreleasing делает. Спасибо за вашу помощь.

+0

'__autoreleasing *' освобождает объекты при возврате. Я не уверен, но я думаю, что ваше предположение об использовании выделенного объекта во втором вызове метода правильное. Проверьте [ответ] Колина [http://stackoverflow.com/questions/9502116/use-of-autoreleasing-in-code-snippet-example). [This] (http://stackoverflow.com/questions/8862023/in-which-situations-do-we-need-to-write-autoreleasing-ownership-qualifier) ​​поток также затрагивает эту концепцию. – Gandalf

ответ

0

__autoreleasing означает, что библиотека ARC включена, и вам не нужно освобождать NSError, возвращаемый методом saveBookmarksWithError. Вы можете передать значение nil этому методу, если не хотите обрабатывать условие ошибки. В противном случае вы можете передать указатель NSError, как указано в примере кода, и отобразить пользователю или записать в журнал.

+0

Сразу после этого я вызываю другой метод, но используя ту же ошибку, может ли это быть причиной сбоя ..? Поскольку это уже было выпущено, и второй метод пытается его сохранить ..? –

+0

Если вы используете ARC, тогда NSError не будет выпущен при переходе к другому методу. Не могли бы вы поделиться своим кодом здесь. –

+0

Я поделился ею в вопросе. –

Смежные вопросы