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]在自动引用计数中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)