use*_*612 2 xcode reference-counting objective-c
我试图理解引用计数是如何工作的,所以我禁用了ARC并编写了一个简单的类:( Foo.h未粘贴,因为它未被修改)
@implementation Foo
- (instancetype)init
{
NSLog(@"Init object");
return [super init];
}
- (void)dealloc
{
NSLog(@"Dealloc object");
[super dealloc];
}
@end
Run Code Online (Sandbox Code Playgroud)
#import <Foundation/Foundation.h>
#import "Foo.h"
int main(int argc, const char * argv[]) {
Foo *obj = [[Foo alloc] init];
obj = nil;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在我希望看到dealloc object日志,因为Foo对象的唯一引用已经消失,但我得到的唯一消息是init object.
我为什么不看?分配时是否释放了对象obj = nil?
不可以.如果您不使用ARC,则在通话时会释放该对象[obj release];.(ARC插入这些电话给你.)设置obj来nil什么都不做内存管理方面(虽然它创建一个对象,你不再能够到达!).
基本上,在没有ARC的Cocoa中:
[obj retain],如果你想利用一个对象的所有权.(alloc这是给你的.)[obj release]当您想要放弃对象的所有权时,您可以打电话.当对象的保留计数达到0时release依次调用dealloc.[obj autorelease]当您想要放弃当前范围之外的对象的所有权时,可以调用.最常见的情况是,当您从方法返回一个对象(并且不想保留它的所有权)时会发生这种情况.| 归档时间: |
|
| 查看次数: |
1518 次 |
| 最近记录: |