#ios #memory-management #automatic-ref-counting
#iOS #управление памятью #автоматический подсчет ссылок
Вопрос:
У меня есть статический одноэлементный класс, который я использую для доступа к основному UIViewController (который создается appdelegate), а через него ко всем вспомогательным UIViewControllers.
Вот как я это объявляю
@interface mySingleton : NSObject
{
ViewController* m_viewController;
}
@property (nonatomic,assign) ViewController* m_viewController
И в файле .m я получаю эту ошибку:
@synthesize m_viewController; // ERROR: Existing ivar "m_viewController" for unsafe_unretained property "m_viewController" must be __unsafe_unretained.
Однако я решаю эту проблему, помещая __unsafe_unretained в объявление, как указано в ошибке..
есть ли у меня какие-либо проблемы с сохранением __unsafe_unretained свойства в m_viewController? Он представляет главное меню приложения и никогда не должен быть освобожден. Таким образом, это зависающий указатель, который никогда не должен быть проблемой из-за того, что он будет выпущен AppDelegate позже, верно?
Ответ №1:
Если вы не хотите, чтобы m_viewController был выпущен, почему бы не использовать strong
вместо assign
?
Кроме того, поскольку обычно именно делегат приложения выделяет главный контроллер представления, и поскольку делегат приложения доступен через UIApplication singleton, почему бы не сохранить ссылку на главный контроллер представления там вместо создания отдельного класса только для этого?