Objective c 调用';获取规则';功能和保留结果?
如果函数遵循“获取规则”(如Apple在此处所述:) 在您有机会调用CFRetain之前,是否可以取消分配结果(因为CFRelease在别处) 以以下代码为例:Objective c 调用';获取规则';功能和保留结果?,objective-c,Objective C,如果函数遵循“获取规则”(如Apple在此处所述:) 在您有机会调用CFRetain之前,是否可以取消分配结果(因为CFRelease在别处) 以以下代码为例: // Using CFAttributedStringGetString as an example // but I am asking about *any* GET rule function CFStringRef * str = CFAttributedStringGetString(...); CFRetain(str);
// Using CFAttributedStringGetString as an example
// but I am asking about *any* GET rule function
CFStringRef * str = CFAttributedStringGetString(...);
CFRetain(str);
在实际调用CFRetain时,我们是否可能持有对已释放CFString的引用?若否,原因为何?如果可能,我如何避免这种情况发生?对于此代码:
CFStringRef * str = CFAttributedStringGetString(...);
CFRetain(str);
不可能持有对CFString
对象的悬空引用
这是因为:
str
位于该堆栈上,因此线程是私有的,因此其他线程都没有对字符串对象的引用好的,
str
在堆栈上,是线程私有的,不能修改,但是它指向的内容可以在另一个线程中修改。我知道runloop是一个单线程,所以在这个函数返回之前,没有其他函数可以修改引用的对象,但是其他线程呢?