Tim*_*ple 3 xcode initialization objective-c alloc automatic-ref-counting
我知道我想要使用:
ObjectClass *tmpObject = [[ObjectClass alloc] init];
realObject = tmpObject;
[tmpObject release]
Run Code Online (Sandbox Code Playgroud)
初始化realObject(类中realObject的对象在哪里)
但是现在使用ARC模式,释放是自动的,我还需要使用这种技术吗?我可以简单地使用realObject = [[ObjectClass alloc] init];吗?如果没有,是否有任何具体原因会泄漏?
谢谢
bbu*_*bum 16
正如Spencer所说,如果你在启用ARC的情况下进行编译,则根本无法调用release.这样做是错误的,编译器会为您处理它.
然而:
ObjectClass *tmpObject = [[ObjectClass alloc] init];
realObject = tmpObject;
[tmpObject release]
Run Code Online (Sandbox Code Playgroud)
tmpObject对于ARC和手动保留释放,在这种情况下完全没有意义.而且,事实上,在手动保留释放中,上面的代码将立即释放分配的对象,导致它被释放(除非ObjectClass内部做了奇怪的事情)并且realObject将留下悬空指针.
也就是说,编写的代码会在第一次尝试发送消息时导致崩溃realObject.
澄清:
ObjectClass *tmpObject = [[ObjectClass alloc] init];
// tmpObject now contains a reference to an instance of ObjectClass; say, 0x12340
realObject = tmpObject;
// realObject now contains a reference to that same instance; realObject == 0x12340
[tmpObject release]
// this releases the object
// both tmpObject and realObject now reference a deallocated object; much hilarity ensues.
Run Code Online (Sandbox Code Playgroud)
对于ARC,您只需执行以下操作:
realObject = [[ObjectClass alloc] init];
Run Code Online (Sandbox Code Playgroud)