ios - block 初始化的 ViewController 提前释放

标签 ios objective-c uiviewcontroller objective-c-blocks

我正在一个 block 中初始化一个 SubViewController。我将 View Controller 的 View 作为 subview 添加到我的 MainViewcontroller。我的 SubViewController 中有一些按钮逻辑。 现在,当我按下 subview 中的按钮时,应用程序崩溃了,因为 SubViewController 已经被释放了。

恐怕这是一个主要的设计问题 - 但目前我不知道如何避免这种情况。

这是初始化在我的 block 语句中的样子

__strong AAFBPostView *newPost = [[AAFBPostView alloc]init];
newPost.view.frame = CGRectMake(0, 300, 320, 88);
[self.view addSubview:newPost.view];
[newPost setData:result]; //passing some data to the view

最佳答案

您应该使用容器 View Controller 的 API。 UIViewController 的文档中对此进行了全部介绍。

代码的问题是,一旦 newPost 变量超出范围,就没有对 AAFBPostView View Controller 的强引用。顺便说一句 - 你的 View Controller 的类名应该是 AAFBPostViewController 。当前的名称意味着它是一个 View ,而不是 View Controller 。

通过使用容器 API,父 View Controller 保留对 subview Controller 的引用,从而解决了问题。

详情可见Creating Custom Content View Controllers “iOS View Controller 编程指南”部分。

关于ios - block 初始化的 ViewController 提前释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21338023/

相关文章:

ios - self.tabBarController dismissViewControllerAnimated 不起作用

ios - Swift - 使用 NSUserDefaults 保存高分

ios - UIPageControl 选择点并转到该页面

ios - 使用 NSMutableAttributedString 和正则表达式将特定文本替换为图像

ios - Swift:状态栏颜色与导航栏颜色不同

ios - 线程 1 :EXC_BAD_ACCESS (code=1, 地址=0x14)

ios - uitableview 分隔符显示为三角形

c# - 将 C# 项目文件转换为 Objective C 类的最佳方法是什么

ios - 可以忽略 Xcode 中冲突的约束吗?

ios - 将资源嵌入二进制作为字节数组的缺点?