在阅读Foundation的标题时,我发现如下:
- (__strong const char *)UTF8String NS_RETURNS_INNER_POINTER;
// Convenience to return null-terminated UTF8 representation这来自于NSString.h 7.1SDK中的iOS,__strong const char *在这里意味着什么?
我对这里的"__strong"感到很困惑。
发布于 2014-05-19 09:03:27
基金会在iOS和Mac之间共享。在Mac上,有一段时间存在一个垃圾收集内存管理系统。现在,它已不再受欢迎,不再支持Mac。它从未在iOS上使用过。
GC使用__strong作为普通指针类型声明的修饰符,以使指向内存的声明成为可收集的。__strong的这种用法在ARC或手动保留/发布代码中没有任何意义。声明没有警告的事实可能只是因为clang在系统头中没有发出警告。
发布于 2014-05-19 09:10:28
NS_RETURNS_INNER_POINTER是一个Clang注释,它指示该方法返回指向其内部数据结构之一的指针(即实例变量),并且该内部变量未被引用计数,因此每当调用该方法时,ARC应增加接收方的保留计数(因为只要使用指向其内部数据结构的指针,就不应释放该对象)。
在这种情况下,__strong本质上与NS_RETURNS_INNER_POINTER一起操作,以指示返回指向其内部数据结构的指针的对象的生存期。
发布于 2014-05-19 07:52:08
__strong意味着持有指针的对象(在本例中是NSString类的对象)保留其所有权,直到对象的生命周期结束,并且指向的内存将被垃圾收集。因此,INNER。
const char *意味着这个指针指向的char数组是常量的,也就是说不能通过更改其中的某些字符来更改(您将得到一个编译器错误)。
如果您试图编译以下内容:
#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错误。
https://stackoverflow.com/questions/23732115
复制相似问题