首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在哪些情况下,我们需要在ARC下编写__autoreleasing所有权限定符?

在哪些情况下,我们需要在ARC下编写__autoreleasing所有权限定符?
EN

Stack Overflow用户
提问于 2012-01-14 19:52:25
回答 1查看 28.4K关注 0票数 122

我在试着完成这个拼图。

对于所有Objective-C可保留对象指针,如NSObject、NSString等,__strong都是默认的。这是一个很强的参考资料。ARC将其与示波器末尾的-release相平衡。

__unsafe_unretained等同于旧的方式。它用于弱指针,而不保留可保留对象。

__weak类似于__unsafe_unretained,只是它是一个自动归零的弱引用,这意味着一旦被引用的对象被释放,指针就会被设置为空。这消除了悬空指针和EXC_BAD_ACCESS错误的危险。

但是__autoreleasing到底有什么好处呢?当我需要使用这个限定词时,我很难找到实际的例子。我相信它只适用于需要指针指针的函数和方法,比如:

代码语言:javascript
复制
- (BOOL)save:(NSError**);

代码语言:javascript
复制
NSError *error = nil;
[database save:&error];

在ARC下,必须这样声明:

代码语言:javascript
复制
- (BOOL)save:(NSError* __autoreleasing *);

但这太模糊了,我想完全理解为什么。我找到的代码片段将__autoreleasing放在两颗星之间,这在我看来很奇怪。类型是NSError** (指向NSError的指针指针),那么为什么要将__autoreleasing放在星号之间,而不是简单地放在NSError**前面呢?

此外,在其他情况下,我可能必须依赖__autoreleasing

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8862023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档