NSObject выпущен после layoutSubviews - PullRequest
0 голосов
/ 07 сентября 2011

Во-первых, у меня есть класс, унаследованный от NSObject

@interface Role : NSObject{ /*...*/ } @end

И есть свойство для хранения указателя момента для Role класса.

@property (nonatomic, retain) Role * role;

Теперькогда создается UIView, я инициализирую мгновение класса Role.

Role * r = [[Role alloc] init];
role = r;
[r release];

Как я понимаю, свойство role помечено retian, тогда оно автоматически увеличит ссылкусчитать, когда я устанавливаю значение, и уменьшать счетчик ссылок, когда для свойства устанавливается значение nil при выходе из приложения.

Все выглядит хорошо, но когда я запускаю приложение, я обнаружил, что получу исключение EXC_BAD_ACCESS.

Я добавил NSLog, и это потому, что момент Role был released и dealloced после UIView вызова layoutSubviews, я не могу понять, почему это происходит, потому что Я НЕУ меня есть код для release в этот момент.

Текущее временное решение для меня: я комментирую строку [r release]

Пожалуйста, кто-нибудь может дать мне какое-то объяснение, если есть какая-то предысторияне знаюr layoutSubviews?

Спасибо

Ответы [ 2 ]

3 голосов
/ 07 сентября 2011

Вы получаете доступ к своему ивару напрямую. Это должно было быть:

self.role = r;

Избегайте прямого доступа к своим иварам; всегда используйте аксессоры, кроме init и dealloc.

2 голосов
/ 07 сентября 2011

Вы должны вызвать свойство "метод установки", чтобы сохранить значение .

self.role = r;

или

[self setRole:r];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...