gpt4 book ai didi

iphone - Objective C iPhone 何时将对象引用设置为 nil

转载 作者:太空狗 更新时间:2023-10-30 03:29:56 27 4
gpt4 key购买 nike

我使用 Objective C 和 Cocoa 框架进行开发已经有一段时间了。然而,我仍然不是很清楚,什么时候应该将对象引用设置为 nil。我知道建议在释放具有委托(delegate)的对象之前这样做,并且您还应该在保留 subview 的 viewDidUnload 方法中这样做。但究竟什么时候应该这样做,为什么?它究竟完成了什么?提前谢谢你。

-奥斯卡

最佳答案

假设您在类的接口(interface)中定义了一个指针 myView:

@interface MyClass {
UIView *myView;
}

@end

然后在您的代码中,在某个时刻,您可以释放该变量:

[myView release];

在你这样做之后,指针 myView 将不会指向 nil,而是指向一个可能不再存在的对象的内存地址(因为你刚刚释放了它).所以,如果你碰巧在这之后做了一些事情,比如:

[myView addSubview:otherView];

你会得到一个错误。

另一方面,如果您这样做:

[myView release];
myView = nil;
...
[myView addSubview:otherView];

调用 addSubview 不会产生任何负面影响,因为传递给 nil 的消息会被忽略

作为必然结果,您可能会看到使用 retain 属性的建议,例如:

@property(retain) UIView *myView;

然后在代码中,做:

self.myView = nil;

通过这样做,合成访问器将释放旧对象并在一行代码中将引用设置为 nil。如果您想确保所有属性都已释放并设置为 nil,这可能会很有用。

有一件事你永远不能忘记,内存管理是通过 retain release 调用来完成的,而不是通过分配 nil 来完成。如果你有一个保留计数为 1 的对象,并将 nil 分配给它的唯一变量,你将泄漏内存:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,10,10)];
view = nil;
// You just leaked a UIView instance!!!

关于iphone - Objective C iPhone 何时将对象引用设置为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1670876/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com