Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa垃圾收集和保留周期_Cocoa_Xcode4.2 - Fatal编程技术网

Cocoa垃圾收集和保留周期

Cocoa垃圾收集和保留周期,cocoa,xcode4.2,Cocoa,Xcode4.2,我对Cocoa/Objective-C还很陌生,所以我希望能解释我的问题。 我在Xcode 4.2中创建了一个垃圾收集应用程序,我的应用程序委托创建了一个授权对象(我的类),该对象将创建并提供一个密码对象(我的类/xib) 密码窗口接受输入,批准或拒绝并关闭。从那里,Authorize对象将关闭,控制权返回给app委托。当密码nib显示为模式窗口时 作为测试,我在初始化每个对象和完成每个对象时都包含一条NSLog语句。由于某些原因,我的密码对象尚未最终确定。授权对象已完成 我甚至删除了Autho

我对Cocoa/Objective-C还很陌生,所以我希望能解释我的问题。
我在Xcode 4.2中创建了一个垃圾收集应用程序,我的应用程序委托创建了一个授权对象(我的类),该对象将创建并提供一个密码对象(我的类/xib)

密码窗口接受输入,批准或拒绝并关闭。从那里,Authorize对象将关闭,控制权返回给app委托。当密码nib显示为模式窗口时

作为测试,我在初始化每个对象和完成每个对象时都包含一条NSLog语句。由于某些原因,我的密码对象尚未最终确定。授权对象已完成

我甚至删除了Authorize对象,直接从app委托创建了密码,但仍然没有最终确定

我已经研究并尝试了我能想到的一切/任何方法来完成此对象(我假设如果此对象未完成,它不会释放此对象的内存)。
有人能提出一些我可能忽略的建议吗

更新:
经过更多的实验,我发现了问题。我创建了一个只有AppDelegate和WindowController/Nib文件的新项目。使用与GC和build相同的设置,我能够消除所有问题,直到发现问题。
我的密码笔尖中有一个NSSecureText字段。无论出于何种原因,当窗口关闭时,这不会释放。
在关闭窗口之前,我添加了行[textField removeFromSuperview],并调用了finalize方法。
我不确定这是否是最好的方法,但它似乎有效。

对于ARC选项,我的印象是项目需要达到10.7或更高的目标才能使用ARC。我希望最低目标为10.5。

也许我错了。如果我是,请告诉我。

如果没有调用
finalize
,则说明您仍然有一个强引用,或者GC没有运行。由于其他对象完成,显然GC正在运行。因此,你必须寻找谁持有一份强有力的推荐信。对所有以
Password
类型变量作为起点的人审核您的代码。确保它没有卡在某个字典或数组中。确保它没有被尚未消失的视图控制器或视图持有


如果可能的话,切换到ARC而不是GC。这可能是完全一样的,但其他一切都要好得多。GC是一个有趣的实验,我们很多人都忽略了,但ARC肯定是平台的发展方向。

关于(更新)问题的这一部分:

对于ARC选项,我的印象是项目需要达到10.7或更高的目标才能使用ARC。我希望最低目标是10.5。 也许我错了。如果我是,请让我知道

您可以使用ARC以64位Snow Leopard或更高版本为目标,但如果要执行此操作,则不能使用调零弱引用-请改用assign properties,并将任何显式声明的IVAR标记为
\uuuuuunsafe\uunrepaired
。(有关详细信息,请参阅。)