【发布时间】:2014-06-09 08:17:45
【问题描述】:
我有一个自定义类/对象,它使用 CADisplayLink 为给定视图处理手势和执行动画。我的类最简单的形式如下所示:
@interface SomeClass : NSObject
@property (strong) UIView *someView;
@end
当我将以下代码添加到我的视图控制器时......
- (void)viewDidLoad
{
[super viewDidLoad];
SomeClass *someClass = [[SomeClass alloc] init];
someClass.someView = someView;
}
...我预计我的 someClass 对象将在视图控制器的生命周期内保留,因为我使用了对 someView 的强引用。
但是 someClass 会立即被释放。
我已经知道我可以通过添加 someClass 作为视图控制器的属性(或者实际上是 iVar)来克服释放问题,但是我最好避免这种额外的工作......
那么无论如何我可以保留我的类,直到与其关联的视图或视图控制器被释放?
编辑
UIGestureRecognizer 对象是当我将它们与视图关联时不会被释放的类的示例...
- (void)viewDidLoad
{
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] init];
[someView addGestureRecognizer:gestureRecognizer];
}
// tapGestureRecognizer still lives
这大概是因为 UIView 拥有 UIGestureRecognizer 对象的所有权。无论如何,我的班级和 UIView 类别是否可以实现这一目标?即……
- (void)viewDidLoad
{
[super viewDidLoad];
SomeClass *someClass = [[SomeClass alloc] init];
[someView addSomeClass:someClass];
}
【问题讨论】:
标签: ios objective-c dealloc