objective-c-init]在自动引用计数中

objective-c-init]在自动引用计数中,第1张

概述我知道我想要使用: ObjectClass *tmpObject = [[ObjectClass alloc] init];realObject = tmpObject;[tmpObject release] 初始化realObject(其中realObject是类中的对象) 但是现在使用ARC模式,释放是自动的,我还需要使用这种技术吗? 我可以简单地使用realObject = [[Obje 我知道我想要使用:

ObjectClass *tmpObject = [[ObjectClass alloc] init];realObject = tmpObject;[tmpObject release]

初始化realObject(其中realObject是类中的对象)

但是现在使用ARC模式,释放是自动的,我还需要使用这种技术吗?
我可以简单地使用realObject = [[ObjectClass alloc] init] ;?
如果没有,是否有任何具体原因会泄漏?

谢谢

解决方法 正如Spencer所说,如果你在启用ARC的情况下进行编译,则根本无法调用release.这样做是错误的,编译器会为您处理它.

然而:

ObjectClass *tmpObject = [[ObjectClass alloc] init];realObject = tmpObject;[tmpObject release]

在这种情况下,对于ARC和手动保留释放,tmpObject完全没有意义.事实上,在手动保留释放中,上面的代码将立即释放分配的对象,导致它被释放(除非ObjectClass内部做了一些奇怪的事情)并且realObject将留下一个悬空指针.

即所写的代码会在第一次任何人尝试发送消息时导致崩溃.

澄清:

ObjectClass *tmpObject = [[ObjectClass alloc] init];// tmpObject Now contains a reference to an instance of ObjectClass; say,0x12340realObject = 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.

对于ARC,您只需执行以下 *** 作:

realObject = [[ObjectClass alloc] init];
总结

以上是内存溢出为你收集整理的objective-c-init]在自动引用计数中全部内容,希望文章能够帮你解决objective-c-init]在自动引用计数中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1003405.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存