Objective-c:返回类型__strong const char *是什么意思?

时间:2014-05-19 07:33:32

标签: objective-c

阅读基金会的标题时,我发现了这个:

- (__strong const char *)UTF8String NS_RETURNS_INNER_POINTER;   
// Convenience to return null-terminated UTF8 representation

这是来自iOS 7.1 SDK中的NSString.h__strong const char *在这里是什么意思?

我最担心的是"__strong"

3 个答案:

答案 0 :(得分:5)

基础在iOS和Mac OS之间共享。在Mac OS上,有一段时间存在垃圾收集内存管理系统。它已被弃用,在Mac OS上不再受支持。它从未在iOS上使用过。

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

答案 1 :(得分:0)

NS_RETURNS_INNER_POINTER是一个Clang注释,表示该方法返回一个指向其内部数据结构之一的指针(即实例变量),表示内部变量未被引用计数,所以无论何时调用该方法,ARC都应该增加 receiver 的保留计数(因为只要指向其内部数据结构的指针正在使用,就不应该释放该对象。)

在这种情况下,__strong基本上与NS_RETURNS_INNER_POINTER一起使用,以指示返回指向其内部数据结构的指针的对象的生命周期。

答案 2 :(得分:-1)

__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错误。