У меня есть собственный класс/объект, который обрабатывает жесты и выполняет анимацию для данного вида с помощью 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];
}