为啥当我尝试在 ios 7.1 sdk、xcode 5.1 中调用 deallocate 或 release 时出现错误?
Posted
技术标签:
【中文标题】为啥当我尝试在 ios 7.1 sdk、xcode 5.1 中调用 deallocate 或 release 时出现错误?【英文标题】:why there is error when i try to call deallocate or release in ios 7.1 sdk, xcode 5.1?为什么当我尝试在 ios 7.1 sdk、xcode 5.1 中调用 deallocate 或 release 时出现错误? 【发布时间】:2014-06-23 10:38:23 【问题描述】:我是 Objective-c 编程的新手。
我看了几个教程,它们很旧,适用于较旧的 sdk 和 xcode,例如 ios sdk 6、xcode 4.*
当我尝试调用函数时:
UILabel *label;
[label release];
// OR
[label dealloc];
它不起作用,它会弹出这些错误:
ARC 禁止“dealoca”或“release”的显式消息发送
这是怎么回事?
【问题讨论】:
【参考方案1】:您的项目在 ARC(自动引用计数)下。这意味着您不必显式调用保留/释放。 ARC 在编译期间插入所需的内存管理调用。查看此link 了解更多信息
如果您不希望文件位于 ARC 下,并且希望手动管理文件,则需要为各个文件设置编译器标志:“-fno-objc-arc”。当您重新使用已完成手动内存管理的旧文件时,这通常很有帮助。
【讨论】:
根据您的代码,版本会在编译期间自动放置。因此,如果它是 ARC 下的纯客观 c 代码,通常不会存在内存泄漏【参考方案2】:您可以在分配后释放任何对象。过程是—— 1.. 默认情况下,任何对象的保留计数为 0。 2.. 如果你分配它,它的保留计数会增加 1。 3..如果你释放这个对象,retain count减1。(再次变为0)
表示你可以多次保留和释放任何对象,但对象保留计数不应小于0。
如果您的项目中未启用 ARC 功能,您必须以编程方式管理此功能。如果启用了 ARC(就像在您的项目中一样),那么您不必为“发布”而烦恼。
【讨论】:
以上是关于为啥当我尝试在 ios 7.1 sdk、xcode 5.1 中调用 deallocate 或 release 时出现错误?的主要内容,如果未能解决你的问题,请参考以下文章
Facebook 使用 Parse SDK 登录(iOS 9、Xcode 7.1、Swift 2.1)
Xcode Server CI 构建无法与 iOS 7.1 一起安装