Objective-C:在释放父对象之前,是否必须dealloc属性对象?

Mar*_* R. 5 iphone garbage-collection memory-management objective-c dealloc

假设我有一个名为"foo"的对象,另一个名为"bar"的对象作为属性.

当"foo"解除分配时,它会自动删除对"bar"的所有引用,以便"bar"也可以解除分配吗?或者"foo"deallocate和"bar"漂浮在某个地方的记忆中?即使所有"bar"的引用都在"foo"中定义.

提前致谢.

Bol*_*ock 15

如果foo对象有任何保留或复制(感谢Dave)bar,例如当您将属性声明为以下任何一个时:

@property (nonatomic, retain) NSString *bar;
// Or
@property (nonatomic, copy) NSString *bar;
Run Code Online (Sandbox Code Playgroud)

您需要bar在解除分配时释放foo:

- (void)dealloc
{
    [bar release];

    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

bar你摆脱对它的所有引用之前,系统不会释放你的内存空间(即引用计数降到0),因此你必须自己监视你的引用计数和对象.

  • 如果属性声明为`copy`,则还必须释放+1. (2认同)