您能告诉我在非 ARC 世界中哪种方法是正确的以及为什么吗?
+ (NSString *)getUUID {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return [(NSString*) string autorelease];
}
or
+ (NSString *)getUUID {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return (NSString*)string;
}
其他答案对于手动保留计数是正确的。当你醒悟过来 ;^) 并切换到 ARC 时,你将无法发送autorelease
。相反,在 ARC 下,这样做:
+ (NSString *)getUUID {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return CFBridgingRelease(string);
}
A CFBridgingRelease
相当于一个CFRelease
为了平衡返回的 +1 保留计数CFUUIDCreateString
,但也会返回一个仍然有效的引用,ARC 将负责释放该引用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)