Освободить объект без указателя? - PullRequest
2 голосов
/ 29 декабря 2010

Я только начал разрабатывать для iPhone и пытаюсь разобраться с управлением памятью. Я сделал небольшую программу, которая показывает карту и аннотацию на карте. Для аннотации я создал простой класс, который реализует протокол MKAnnotation.

Чтобы создать и добавить аннотацию, я написал это:

[self.myMapView addAnnotation:[[MyAnnotation alloc] init]];

Работало нормально, пока я не попытался освободить объект. Нечего выпускать. Это то, что я сделал бы в C #, я думаю, это не работает без сборки мусора?

Так это единственный способ сделать это?

MyAnnotation *myAnnotation = [[MyAnnotation alloc] init];

[self.myMapView addAnnotation: myAnnotation];

[myAnnotation release];

Ответы [ 3 ]

8 голосов
/ 29 декабря 2010
[self.myMapView addAnnotation:[[[MyAnnotation alloc] init] autorelease]];
1 голос
/ 29 декабря 2010

Да, это приемлемый способ справиться с такой ситуацией. Вы могли бы также назвать autorelease, как в ответе codelark, но в ограниченной среде памяти iPhone автоматическое высвобождение может иногда вызывать проблемы из-за объектов, задерживающихся на некоторое время, прежде чем они наконец будут выпущены. Хорошая практика - избегать автоматического выпуска, где это возможно.

0 голосов
/ 03 января 2011

Всем спасибо за ответы.

Мне кажется, что этот код больше всего напоминает решение, о котором я думал в первую очередь.

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