首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标-c:返回类型__strong const *是什么意思?

目标-c:返回类型__strong const *是什么意思?
EN

Stack Overflow用户
提问于 2014-05-19 07:33:31
回答 3查看 1.7K关注 0票数 10

在阅读Foundation的标题时,我发现如下:

代码语言:javascript
复制
- (__strong const char *)UTF8String NS_RETURNS_INNER_POINTER;   
// Convenience to return null-terminated UTF8 representation

这来自于NSString.h 7.1SDK中的iOS,__strong const char *在这里意味着什么?

我对这里的"__strong"感到很困惑。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-19 09:03:27

基金会在iOS和Mac之间共享。在Mac上,有一段时间存在一个垃圾收集内存管理系统。现在,它已不再受欢迎,不再支持Mac。它从未在iOS上使用过。

GC使用__strong作为普通指针类型声明的修饰符,以使指向内存的声明成为可收集的。__strong的这种用法在ARC或手动保留/发布代码中没有任何意义。声明没有警告的事实可能只是因为clang在系统头中没有发出警告。

票数 6
EN

Stack Overflow用户

发布于 2014-05-19 09:10:28

NS_RETURNS_INNER_POINTER是一个Clang注释,它指示该方法返回指向其内部数据结构之一的指针(即实例变量),并且该内部变量未被引用计数,因此每当调用该方法时,ARC应增加接收方的保留计数(因为只要使用指向其内部数据结构的指针,就不应释放该对象)。

在这种情况下,__strong本质上与NS_RETURNS_INNER_POINTER一起操作,以指示返回指向其内部数据结构的指针的对象的生存期。

票数 0
EN

Stack Overflow用户

发布于 2014-05-19 07:52:08

__strong意味着持有指针的对象(在本例中是NSString类的对象)保留其所有权,直到对象的生命周期结束,并且指向的内存将被垃圾收集。因此,INNER

const char *意味着这个指针指向的char数组是常量的,也就是说不能通过更改其中的某些字符来更改(您将得到一个编译器错误)。

如果您试图编译以下内容:

代码语言:javascript
复制
#import <Foundation/Foundation.h>

int main(int argc, char **argv)
{
    NSString *s = @"string";
    const char *str = [s UTF8String];
    printf("%s\n", str);
    str[0] = 'S';
    printf("%s\n", str);
    return 0;
}

您将得到read-only variable is not assignable错误。

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

https://stackoverflow.com/questions/23732115

复制
相关文章

相似问题

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