@интерфейс:
UIImageView *myImageView;
@property (nonatomic, retain) UIImageView *myImageView;
@выполнение:
@synthesize myImageView;
- (void)viewDidLoad
{
[super viewDidLoad];
self.myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
}
Каков счетчик ссылок для myImageView? 2 (1 из alloc, 1 из точечной нотации сохранить) или 3 (1 из alloc, 1 из точечной нотации сохранить, 1 из @property сохранить)
У этих двух операторов одинаковое количество ссылок?
self.myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
и
myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
Кроме того, я предполагаю, что вы выпускаете их в @implemenation и в методе dealloc, верно?
РЕДАКТИРОВАТЬ:
Я не получил того ответа, который хотел, возможно, мой вопрос расплывчатый. Я понимаю, что такое точечная нотация, @property, @synthesize и как работают сеттеры и геттеры. Чего я не понимаю, так это того, что происходит при использовании «я». и без «себя». относительно удержания счетчика. Я действительно запустил метод keepCount для объекта myImageView, и он подтвердил мой оригинал, «я». case сразу же имеет счетчик сохранения два (с выделением и сохранением свойств, поэтому, вероятно, будет хорошей идеей использовать там autorelease). Теперь это приводит к другому вопросу: если бы я не использовал автоспуск, как мне это сделать? Release один раз в viewDidLoad и еще раз в dealloc все равно приведет к утечке памяти, верно?
self.myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
NSLog(@"retain count dot: %d", [myImageView retainCount]);
2011-05-17 10: 01: 14.915 Тест [1249: 207] сохраняет количество точек: 2
myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
NSLog(@"retain count: %d", [myImageView retainCount]);
2011-05-17 10: 03: 14.715 Тест [1278: 207] сохраняет счет: 1
alloc
дает объект со счетчиком ссылок +1,self.myImageView = aView
добавляет единицу к счетчику ссылок,release
уменьшает счетчик удержания на единицу ..... - person bbum   schedule 16.05.2011+alloc
- это одно, присвоение свойству через сеттер - другое ... так что да, вам нужно два релиза или авто-релиза. Это так просто; если вы сохраните, вы должны отпустить. - person bbum   schedule 16.05.2011