【发布时间】:2012-02-13 17:16:11
【问题描述】:
我刚刚花了一天时间追踪一个非常奇怪的错误。这是一个过度发布的 UILabel,尽管在代码中没有过度发布。如果我注释掉标签的发布,代码就可以了。
我追踪到一个 UIView 正在后台线程中发布。这似乎不正确,因为您应该从主线程访问所有 UI 元素。然后我找到了一个正在后台线程中加载的 nib 文件:
[[NSBundle mainBundle] loadNibNamed:@"nib name" owner:self options:nil];
我不需要详细说明代码在做什么,但我的问题是:
如果在后台线程中调用 loadNibNamed 并且加载的视图被 nib 加载进程缓存,则主线程也想加载该 nib - 但从缓存中加载它。当我的对象被释放时 - 从背景中的笔尖加载的视图是否也在背景中释放..??真的没有意义,因为无论如何后台线程将不再存在....
我不知道,但是我通过将 GCD 调度中的 loadNibNamed 部分代码同步包装到主线程上来解决了这个问题。
【问题讨论】:
标签: objective-c ios nib grand-central-dispatch loadnibnamed