- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个主视图,它手动创建一个 UIViewController(不是 UINavigationController)并将该 Controller 的 View 添加为 subview 。
然后 subview 通过 [self removeFromSuperview] 关闭自己。我知道这会释放 View ,所以这很好,但是我现在也想摆脱我在删除 View 时立即分配的 UIViewController 以释放内存,而不是等到主视图 Controller 被释放.
我可以避免使用 removeFromSuperview 并反向引用主视图 Controller 并让它关闭 subview 并释放 Controller ,但感觉应该有更简洁的方法。
是否有实现此目标的既定最佳实践?
最佳答案
正确的方法是让你的子 Controller 请求主 Controller 移除它。如果你想减少两个 Controller 之间的耦合,为你的子 Controller 创建一个委托(delegate)协议(protocol):
// This forward declaration avoids having a circular dependency
// between MySubcontroller and MySubcontrollerDelegate
@class MySubcontroller;
@protocol MySubcontrollerDelegate
- (void)hideMySubcontroller:(MySubcontroller*)subcontroller;
@end
如果子 Controller 有其他信息需要与 super Controller 通信,这里是添加相关调用的好地方。您可能不需要立即这样做,但请记住您的应用程序的 future 版本。
然后添加一个delegate
子 Controller 的属性:
@interface MySubcontroller : UIViewController {
id <MySubcontrollerDelegate> delegate;
...
}
@property (assign) id <MySubcontrollerDelegate> delegate;
...
@end
而不是调用 removeFromSuperview
在它看来,子 Controller 应该调用 hideMySubcontroller:
在它的委托(delegate)上,通过 self
作为参数。
然后你的主 Controller 应该声明它实现了委托(delegate)协议(protocol):
@interface MyMainController : UIViewController <MySubcontrollerDelegate>
...
@end
当主 Controller 创建子 Controller 时,应该设置子 Controller 的delegate
属性(property)self
.它应该实现 hideMySubcontroller:
删除子 Controller View 、释放子 Controller 并执行任何其他需要的操作的方法。
使用委托(delegate)协议(protocol)意味着子 Controller 不必知道什么样的对象将使用它;它只知道某处有这样一个对象,并且它将符合委托(delegate)协议(protocol)。因此,两个 Controller 之间的耦合尽可能小。
顺便说一句,如果你能管理它,实际上最好把子 Controller 留在身边,以防你需要再次使用它;这将节省重新创建它所需的处理时间。 (但是,如果收到内存警告,则应释放它。)
关于objective-c - 调用 UIView 的 removeFromSuperview 是否足够,或者是否需要删除 UIViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/810194/
对于我的问题,我找不到更好的措辞。 在我的应用程序中的某个时刻,我设置了一些非常密集的动画。问题是,在高端设备上,动画运行流畅且赏心悦目。另一方面,我测试过的一台低端设备在制作动画时表现非常糟糕。 试
我正在修补 OTP 模块 ( yubico_pam ),并尝试访问管理员选择的控制标志(例如必需,足够, ETC)。 有什么想法吗?这是否可行(无需解析文件)? 最佳答案 无法在 API 中查询此信息
我有一些为 Linux 编写的 C 代码,依赖于套接字和 arpa/inet.h 以及 libusb.h,我想在 MinGW 下为 Windows 编译它。 (请注意,当前项目只有一个非常简单的 Ma
我是一名优秀的程序员,十分优秀!