Отправка сообщений на освобожденные объекты? - PullRequest
1 голос
/ 19 декабря 2011

У меня есть несколько подклассов UIView (кнопки, метки и т. Д.), Которые следуют следующей схеме установки.У меня вопрос, почему сообщения все еще могут быть отправлены на UILabel после release?

    myLabel = [[UILabel alloc] initWithFrame:someFrame];
    [someUIView addSubview:myLabel];
    [myLabel release];

     myLabel.textAlignment = UITextAlignmentCenter;

     // other property changes to myLabel

Они "принадлежат" новому UIView, я полагаю, но я не понимаюпочему release не уничтожает исходный объект и тем самым все сообщения к нему.Я не делаю изменения свойств через someUIView subViews.Я не жалуюсь.Я просто пытаюсь понять, почему.

EDIT: Я должен добавить, что это переменные экземпляра, если это имеет значение.

Ответы [ 4 ]

3 голосов
/ 19 декабря 2011

Объект не уничтожается до тех пор, пока счетчик хранения больше 0. В этом случае someUIView сохранил объект.

На самом деле, лучше всего не обращаться к объекту после его освобождения.лучший образец может быть:

myLabel = [[[UILabel alloc] initWithFrame:someFrame] autorelease];
myLabel.textAlignment = UITextAlignmentCenter;
[someUIView addSubview:myLabel];
myLabel = nil;

Второй пример:

myLabel = [[UILabel alloc] initWithFrame:someFrame];
[someUIView addSubview:myLabel];
myLabel.textAlignment = UITextAlignmentCenter;

// other property changes to myLabel

[myLabel release];
myLabel = nil;
1 голос
/ 19 декабря 2011

Вы все еще можете отправлять сообщения на ярлык, так как ярлык еще не выпущен.-addSubview: сохраняет переданные объекты, поэтому объект остается в памяти, поскольку представление все еще содержит ссылку, а указатель myLabel не был нулем.

1 голос
/ 19 декабря 2011

Ваш звонок на -addSubview: вызывает -retain на этикетке при получении.На этом этапе вы отказываетесь от владения (вызывая -release), и им владеет только представление.Но он все еще существует до тех пор, пока содержащий его вид не выпустит его.

0 голосов
/ 19 декабря 2011

Потому что они, вероятно, сохраняются раньше ...

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