【发布时间】:2012-06-20 14:29:57
【问题描述】:
所以我有一个支持 iOS 4 的项目,所以我所有的 IBOutlets 都是__unsafe_unretained,即使是在 nib 中但在控制器主视图之外的 IBOutlets(同一个 nib 中的单独视图)并且都运行良好。
时间到了,现在客户只想支持 iOS 5,所以我们的团队将所有 __unsafe_unretained IBOutlets 更改为 __weak IBOutlets,但现在不在主视图内的 IBOutlets 设置为 nil ( viewdidload) 除外,因此我们以后无法添加它们。
如果我考虑一下,这是有道理的,因为如果没有视图(主视图)保留那些 IBOutlets,它们应该被释放并归零(我不知道这是否是正确的词),所以解决方案是删除来自那些 IBOutlets 的 __weak
但是对我来说没有意义的是为什么 unsafe_unretained 和 weak 之间的行为不同,在我的脑海中 unsafe_unretained 应该被释放,当应用程序尝试访问它们时,它们应该指向一个无效的引用,然后应用程序应该崩溃。
我认为 unsafe__unretained 与 weak 相同,但没有归零。
我错过了什么吗?
谢谢。
【问题讨论】:
-
你是对的。 unsafe_unretained 不为零引用。
标签: objective-c ios5 memory-management ios4