问题标签 [retaincount]
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.
iphone - 释放(非原子,保留)综合属性
我的问题看起来像十几个关于释放属性的问题,但我找不到我正在寻找的确切答案。
当使用 retain 声明属性时:
然后
它生成具有保留和释放操作的 getter 和 setter。好的。
当然,必须在 dealloc 中释放属性。
所以这很干净。
但是如果我从不使用 myString 怎么办?它是预初始化的吗?我的观点是 myString 保留计数为 0。但是在 dealloc 中释放 myString 会减少它并使应用程序崩溃?但它不会崩溃!
是一种更清洁的释放方式吗?
objective-c - 自动引用计数 (ARC) 和 retainCount
我正在将我的项目转换为使用 ARC,并遇到了一个特殊问题。我有一个类管理从网络下载的文件的缓存。每个文件都存储在 iPhone 文件系统中,并在我的管理器类中为它保存一个关联对象。其他想要使用文件的对象,向我的经理请求缓存对象,并在需要该文件时保留该对象。
但是偶尔,管理器会清理缓存,删除旧文件。当然,它不应该删除当时正在使用的文件。在 ARC 之前,我通过使用关联对象的 retainCount 检测到:
这完美地工作[是的,我知道有关retainCount不可靠性的警告,但根据我的经验,如果retainCount > 1,你肯定知道不止一个对象保留了它]
但是,在 ARC 中,您不能再使用 retainCount。我可以引入我自己的保留计数机制,并要求所有使用文件的对象显式保留和释放文件对象。但这很容易出错,而这正是 ARC 应该解决的问题。
您知道实现相同目标的更好方法吗?
objective-c - UIViewController pushViewController 高保留视图控制器的计数
我写了以下一段代码:
两个日志的结果依次为1和6!这怎么可能?我只调用一次 alloc 方法并在将控制器压入堆栈后释放.. alloc-> +1, push-> +1, release-> -1 = 1 与否?
当我将视图控制器从堆栈中弹出时,我希望视图控制器被释放。
objective-c - 在目标c中保留可变和不可变对象的计数?
输出:dic1:2 dic2:4 dic3:1 dic4:3
可变对象保留计数和不可变对象保留计数之间的区别是什么?请给我解决方案...
objective-c - RetainCount 可以在这种情况下使用吗?
RetainCount == 坏
retainCount
是禁忌、不可靠、不可预测的,一般不应该使用。我没有在我的代码中的任何地方使用它,但是我在一个以一种有趣的方式使用的类中看到了它。
我有一个类运行一个无限期运行的线程,直到线程被取消。问题是线程增加了所有者的保留计数,在我的例子中是实例化它的类。所以,即使我用完了那个类,那个实例仍然会挂起,除非管理我的类的人也有聪明的知识来关闭线程。这是一种解决方案,但这是我在代码中找到的。
这是一个聪明的解决方案,但我不知道该怎么想。它覆盖类上的释放并检查保留计数是否为 2。换句话说,它检查线程是否是唯一使我的对象保持活动状态的线程(因为保留计数即将从 2 减少到 1 ),如果是,它终止线程(quitDispatchThread
将阻塞直到线程终止)。
所以...
你可以依靠retainCount来看看它是不是一个?
通常人们会说要远离,retainCount
因为你不知道那里是否有一些自动释放。但是,如果retainCount 是一个,那么我知道只有线程保持它处于活动状态,并且我不必担心retainCount 可能由于某些自动释放等而关闭......
这段代码有什么问题?
我正要删除它,但它实际上似乎是有道理的。其他对象不必知道我的类正在运行线程。其他对象甚至可以安全retain
地拥有线程的对象,而不必担心关闭线程,因为它会照顾自己。release
autorelease
这段代码实际上感觉很干净,这让我感到惊讶。
编辑 :: NSThread 正在保留我的对象
我使用 NSThread 的事实增加了我的对象的保留计数。我的对象是 thetarget
并且selector
是线程运行的方法。
initWithTarget:选择器:对象:
返回使用给定参数初始化的 NSThread 对象。
- (id)initWithTarget:(id)目标选择器:(SEL)选择器对象:(id)参数
参数
目标
选择器指定的消息发送到的对象。
选择器
要发送到目标的消息的选择器。此选择器只能接受一个参数,并且不能有返回值。
争论
传递给目标的单个参数。可能为零。
返回值
使用给定参数初始化的 NSThread 对象。
讨论
对于非垃圾收集的应用程序,方法选择器负责为新分离的线程设置一个自动释放池,并在它退出之前释放该池。垃圾收集应用程序不需要创建自动释放池。
对象目标和参数在分离线程的执行过程中被保留。当线程最终退出时,它们被释放。
objective-c - 跟踪对象保留调用
如何跟踪保留我的对象的内容?我有一个对象delloc
在从列表中删除时没有按预期进行。我的怀疑是某些东西正在增加保留计数,所以我想知道如何在理想情况下创建一个位置以在该对象的保留计数增加时中断代码。
objective-c - 这增加了保留计数:alloc 还是 init?
当我们需要创建一个对象并获得它的所有权时,我们编写
之后,someObject
保留计数将等于 1。哪种方法会增加计数,alloc
或者init
,以及 Apple 文档中的何处描述了这种行为?
objective-c - 托管对象的引用计数
我有一个类A
(NSManagedObject 的子类),它有一个类的属性B
(也是 NSManagedObject 的子类),该属性不是@synthesize
,在我的模型中和@dynamic
之间没有关系,我只想在他() 活着。
(当我第一次从数据库中获取对象时,他的属性为空) A
B
A
B
A
A
B
我重写了B
属性 getter,所以当第一次调用时,他B
将从 db 中获取对象。
现在我需要保留 fetch 结果B
吗?
我想我听说保留 NSManagedObjectContext 管理的对象不是一个好主意。
iphone - 如何修复保留计数为 +1 的泄漏对象?
我在以下代码中有一个泄漏的对象。我如何解决它?我尝试添加一个 [apiViewController 版本];但是当我分析应用程序时,我仍然得到:
谢谢你的帮助
iphone - 目标 c - 引用计数
直到五分钟,我才确信我对 Objective c 引用计数的理解非常好,但是当我开始检查对象的 retainCount 时,我很惊讶地看到我所看到的。
例如 myViewController 有一个 UITableview:
.h 文件
.m 文件
令我惊讶的是,输入是:
显然 STEP ONE 将保留计数增加 1alloc
我也知道第三步将保留计数增加 1addSubview
但是第二步发生了什么???为什么它增加了保留数???
和ARC有关系吗??