问题标签 [automatic-ref-counting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
21286 浏览

objective-c - ARC 不允许将 Objective-C 指针隐式转换为“void *”

这是什么意思,我有什么选择?

ARC 不允许将 Objective-C 指针隐式转换为“void *”

我正在将一个 Xcode3 项目移植到 iOS5,它像这样使用 AudioSessionInitialize

这里self是一个 ViewController。

0 投票
3 回答
4336 浏览

iphone - iOS——arc下的initWith方法

在过去,我们被训练编写这样的 init 方法:

富.h:

Foo.m:

但是那些身份转换现在是禁止的。那么这些方法现在应该怎么看呢?

编辑:这是一个图书馆。所以没有人知道调用代码可能是什么样子。

0 投票
1 回答
1439 浏览

objective-c - 使用 ARC 和 xcode 4.2 开发了一个应用程序。我怎样才能将它提交给 iTunes?

看完后:

iphone:使用 iOS 5 和 XCode 4.2 提交应用程序?

我意识到使用 ARC 并期望通过这项技术将应用程序发布到应用程序商店可能对我来说有点短视。对我来说最好的行动方案是什么?

  • 使用 Xcode 4 并重做内存管理
  • 等待 Xcode 4.2 发布
  • 其他一些神奇的方法可以解决我所有的问题,让我的梦想成真

感谢您的建议。

更新:以防万一有人对此徘徊,当时 Xcode 4.2 仍处于测试阶段。最终结果:除非您可以等待最终版本,否则不要使用 beta 功能。

0 投票
1 回答
6703 浏览

iphone - UIViewController 在新的 ARC 内存管理下没有被释放

我将我的 UIViewController 子类推到导航堆栈上;然而,由于它被导航控制器保留,我在将它推入堆栈后“释放”指向它的指针,以便当它最终弹出时,viewController 将被释放。

但是,它不起作用,viewController 的 dealloc 方法永远不会被调用。代码看起来像这样:

即使在下面的代码中,我的 newViewController 也没有被释放:

据我了解,在新的自动引用计数(ARC)系统下,一旦没有任何东西指向它,对象就会被解除分配。我在正在创建的 viewController 的 dealloc 方法中放置了一个 NSLog 方法,但它从未被调用过。

我在这里想念什么?!

感谢您阅读我关于堆栈溢出的第一篇文章 :)

**编辑:* *

我道歉。我尝试了包装在自动释放池中的第二段代码,它被释放了。然后我在没有自动释放池的情况下尝试了它,它也正确释放了。我不知道昨晚发生了什么。

(第二次编辑:现在它又停止工作了。fffffffuuuuuuuuuuuu)

0 投票
3 回答
49853 浏览

iphone - 使用 ARC 并针对 iOS 4.0 时如何替换弱引用?

我已经开始使用 Xcode 4.2 开发我的第一个 iOS 应用程序,并以 iOS 5.0 为目标,使用“实用程序”模板(带有 FlipsideViewController 的模板)。

我读到因为 ARC 是一个编译时特性,它也应该与 iOS 4 兼容,所以我尝试将我的应用程序定位到 4.3,并尝试编译它。当我这样做时,我收到此错误:

FlipsideViewController.m:错误:自动引用计数问题:当前部署目标不支持自动 __weak 引用

它引用了这一行:

该变量声明为:

我知道 iOS 4 不支持“弱引用”,但我真的不明白为什么我要使用弱引用开始,我也不知道如何重写东西以避免使用它,而仍在利用 ARC(毕竟,它应该适用于 iOS 4 和 5,对吧?)

0 投票
1 回答
350 浏览

iphone - 内存问题还是其他?

我正在我的 iPad 上运行一个将图像加载到轮播中的应用程序。总共有 138 张图片。如果我将该数字减少到 100,则应用程序加载正常。然而,在 138 处,应用程序暂停,而不是崩溃。

for正在到达viewDidLoad 和第一个语句,如断点所示。问题在于第二个for陈述。

我猜测存在内存问题,尽管由于我使用带有ARC的 iOS 5,我不应该进行任何手动内存管理。

有没有可能是记忆中发生的事情太多了?它有 138 张图片,每张约 146 KB。这大约是 20 MB,但我认为仅此一项不会导致问题。

GDB 退出时没有任何有用的输出,实际上根本没有输出。运行仪器显示,当暂停发生时,实际内存使用量仅为 6.11 MB,CPU 为 77.4%,但虚拟内存为 175 MB。

我担心的是没有内存警告甚至实际崩溃,线程只是暂停并且无法自动恢复或终止,您必须从 xcode 中终止它。

0 投票
2 回答
6399 浏览

objective-c - 使用 ARC 在块内设置 NSError

我希望使用自动引用计数从项目的块中设置一个 NSError 指针。以下是我的代码的简化版本:

这可以编译,但error可以通过 doSomethingWithItem我尝试为要修改的块创建一个本地 NSError 来修改,然后error在枚举之后使用它来设置原始值(我没有显示):

这无法编译并出现以下错误:

将非本地对象的地址传递给 __autoreleasing 参数以进行回写

谷歌搜索这个错误只会返回 Clang 源代码本身的结果。

一种似乎可行但有点难看的解决方案是拥有一个内部和外部错误指针:

从块中设置 NSError 的正确方法是什么?

0 投票
3 回答
908 浏览

iphone - 使用 base sdk 5.0 编译的应用程序是否可以在 iOS4.x 上运行?

使用 base sdk 5.0 编译的应用程序是否可以在 iOS4.x 上运行?

我已将部署目标设为 4.0。ARC 能否在 iOS4.x 设备上运行。有没有办法在同一个应用程序中同时支持两者?如果我在 iOS5 中使用 ARC,内存管理是否会在iOS4.x设备中正常进行?

0 投票
1 回答
2041 浏览

cocoa - 使用 ARC 在 Lion 上基于视图的 NSTableView EXC_BAD_ACCESS

这很奇怪。我有一个超级简单的项目来学习 NSTableView,它在我的 nib 中设置,设置为基于 View 的 tableView。我还设置了数据源并委托给我的控制器对象。

然而,当我这样做并运行时,我得到一个 EXC_BAD_ACCESS,跟踪从我的主函数开始,堆栈的其余部分在 Cocoa 内部(所以不是我的代码)。

除了这个项目使用 ARC(它是一个新项目,所以这是默认设置)之外,真的没有什么特别的事情发生。

我还尝试使用分析器来确保我没有在任何地方不正确地进行内存管理并且没有任何问题。

如果我不设置数据源/委托,我不会崩溃,但显然这不是构建我的应用程序的好方法!

有任何想法吗?

编辑

委托和数据源都在 IB 中设置。代码如下(基于视图)。重要的是要注意,无论此代码是否存在,我都会崩溃,并且在任何一种情况下都是相同的崩溃:

0 投票
3 回答
20270 浏览

ios - KVO 和 ARC 如何移除Observer

如何从ARC下的对象中删除观察者?我们是否只是添加观察者而忘记删除它?如果我们不再手动管理内存,我们该从哪里放弃观察?

例如,在视图控制器上:

以前,我会调用removeObserver:视图控制器的dealloc方法。