【问题标题】:iOS 5 NSString release not availableiOS 5 NSString 版本不可用
【发布时间】:2011-12-31 04:48:58
【问题描述】:

我在网上看到,当我使用 allocinit 创建一个对象时,我必须释放它(即使是 NSString),所以:

如果我以这种方式创建NSString

NSString *prova = [[NSString alloc] init];
[prova release];

我收到以下错误:

'release'不可用:在自动引用计数模式下不可用

ARC 禁止发送“release”的显式消息

[prova release] 消息上?当我尝试这样做时,我没有收到任何错误:

NSString *prova = [[NSString alloc] init];
NSLog(@"Contenuto 0 di prova: %@", prova);
prova = @"prima prova stringa";
NSLog(@"Contenuto 1 di prova: %@", prova);
prova = @"ma cosè questo fantomatico errore";
NSLog(@"Contenuto 2 di prova: %@", prova);

【问题讨论】:

标签: iphone ios5 xcode4.2


【解决方案1】:

这是 iOS 5 之前的最佳做法,或者在 iOS 5 中禁用 ARC 模式时的最佳做法。现在iOS 5 uses the new Apple's LLVM compiler, which introduces this ARC feature

因此,如果启用了 ARC(默认情况下),则通常不再需要使用 release 方法。您可以在documentation找到更多详细信息。

如果您仍想开发旧方式,可以在 Xcode 项目的“构建阶段”部分添加标志 -fno-objc-arc

【讨论】:

  • 也谢谢你。是否因为这个原因不再存在内存泄漏的问题?例如,在这里我现在可以毫无问题地更改字符串。但是,我认为 NSString 是一个不可变的对象,为什么我可以在通过赋值决定后更改字符串?
  • @iLew 你可以在这个问题中找到一些答案:stackoverflow.com/q/3428228/592454
  • 谢谢!现在我明白了!
【解决方案2】:

您正在使用 Apple 的新 ARC(自动引用计数)。 ARC是一个新的编译器函数,它在编译时自动添加retain、release和autorelease。

查看 iOS 5 发布节点以了解有关 ARC 的更多信息:http://developer.apple.com/technologies/ios5/

Objective-C 的自动引用计数 (ARC) 使内存管理成为编译器的工作。通过使用新的 Apple LLVM 编译器启用 ARC,您将无需再次键入 retain 或 release,从而大大简化了开发过程,同时减少了崩溃和内存泄漏。编译器对您的对象有一个完整的了解,并在每个对象不再使用时立即释放它,因此应用程序运行速度与以往一样快,性能可预测且流畅。

【讨论】:

  • 非常感谢!我只阅读了 Objective C 指南(并且我正在阅读可可指南),并且似乎这没有写在这个文档中。我在关于内存泄漏的问题中添加的小代码怎么样。我想我不能那样做。谢谢。
  • 如果您想遵循 Cocoa 指南,您可以在构建设置中禁用 ARC,但如果您自己计划一个新项目,我建议您使用此功能。
【解决方案3】:

在 ios 5 中不需要释放对象它会自动释放你的对象。 或以其他方式从您的 xcode 中禁用“Objective-C 自动引用计数”ARC

【讨论】:

    【解决方案4】:

    ARC 是 IOS5 中的新功能,这意味着自动引用计数...当您在应用程序中使用 arc 时,您无需关注发布和所有内容。您可以在复选框中取消选择开始新项目时.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 2012-01-10
      • 1970-01-01
      相关资源
      最近更新 更多