我有一些用 ARC 编译的 Objective C 代码:
void func(void) {
NSString *string;
// Do some stuff. Maybe return early.
string = @"initialized";
// Other stuff.
}
ARC 如何处理未初始化的对象指针?我假设它像 C 指针一样,string
最初包含堆栈垃圾。如果是这样,那么如果我要在初始化变量之前返回,ARC 如何知道如何处理它?
我是否需要将其初始化为,nil
以避免内存泄漏?
如果引用的是调度对象或块而不是,这有关系吗NSObject
?
事实并非如此。摘自Clang ARC 文档:
即垃圾对象指针在 ARC 规则下无效
即,
strong
当引用指向nil
或有效对象指针时,引用有效。(weak
引用稍微复杂一些)关键点:
即,几乎所有变量实际上都
nil
默认被 ARC 自动删除,以使其有效可用。因此,您不需要明确地定义
nil
以这种方式定义的局部变量,因为它会自动完成(尽管通常最好给出明确的默认值以使行为更加明显),并且,对象是调度对象,块还是子类并不重要NSObject
(因为它们都是具有相同行为的 Objective-C 对象)。您需要
union
小心地将包含在 中或使用 手动分配的对象指针正确归零malloc
,但这些情况非常罕见。