Замечания к выпуску iPhone ARC - что делать делегатам по системным классам? - PullRequest
0 голосов
/ 29 октября 2011

Я понимаю примечания к выпуску ARC, однако мне было интересно, что это означает точно и каковы системные классы:

Вы можете реализовать метод dealloc, если вам нужно управлять ресурсами, отличными от освобождения переменных экземпляра.,Вам не нужно (на самом деле вы не можете) освобождать переменные экземпляра, но вам может потребоваться вызвать [systemClassInstance setDelegate:nil] для системных классов и другого кода, который не скомпилирован с использованием ARC.

Это здесь Замечания к выпуску ARC в соответствии с новыми правилами, введенными ARC

Что такое здесь системные классы?.

1 Ответ

4 голосов
/ 29 октября 2011

Я понимаю, что это означает любой класс, начинающийся с «NS» или «UI». Apple не перестраивала все фреймворки с нуля, чтобы использовать ARC. Вместо этого ваш новый код ARC должен успешно взаимодействовать с существующими структурами, если вы следуете правилам.

В частности, свойства делегатов системных классов (таких как UIApplication) по-прежнему объявляются как (nonatomic, assign) вместо (nonatomic, weak). Это означает, что эти свойства не обнуляются автоматически, когда делегат освобождается. Фактически, assign является синонимом unsafe_unretained в ARC. Отсюда совет, чтобы вручную обнулить свойство делегата в вашем методе dealloc. Это связано с тем, что нет никаких шансов, что системный класс попытается получить доступ к своему делегату после его исчезновения.

...