【问题标题】:[NSError retain]: message sent to deallocated instance[NSError 保留]:消息发送到释放的实例
【发布时间】:2015-05-23 14:18:35
【问题描述】:

我正在使用第三方库并像这样调用其中一个函数。

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 的作用。感谢您的帮助。

【问题讨论】:

  • __autoreleasing* 在返回时释放对象。我不确定,但我认为您关于在第二种方法调用中使用已发布对象的假设是正确的。检查科林的answerThis 线程也解决了这个概念。

标签: ios objective-c iphone xcode nserror


【解决方案1】:

__autoreleasing 表示该库已启用 ARC,您无需释放 saveBookmarksWithError 方法返回的 NSError。如果不想处理错误情况,可以将 nil 值传递给此方法。否则,您可以传递示例代码中给出的 NSError 指针并显示给用户或写入日志。

【讨论】:

  • 在这之后我调用了一个不同的方法但是使用了同样的错误,这会导致崩溃吗?因为这已经发布了,第二种方法试图保留它..?
  • 如果您使用 ARC,则传递给另一个方法时不会释放 NSError。你能在这里分享你的代码吗?
  • 我已经在问题中分享了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多