Выпуск a сохраняет свойство UIImage, загруженное через imageNamed?

Почему нет? Кроме того, это не похоже на интервью, всегда (или когда-либо) ярмарка. Необходимо оценить конечные результаты нового подхода против традиционного основанного на интервью подхода.

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

7
задан Alex Wayne 26 May 2010 в 23:56
поделиться

5 ответов

Изображение возвращается вам автоматически выпущенным в соответствии с правилами именования. Присвоение его свойству с атрибутом сохранения через сеттер сохранит его. Назначение другого изображения свойству через сеттер приведет к освобождению старого изображения и сохранению нового.

2
ответ дан 7 December 2019 в 03:18
поделиться

When you define a property with nonatomic & retain, it creates a setter for you that looks like this:

-(void)setImage:(UIImage*)newImage {
  if (image != newImage) {
    [image release];
    image = [newImage retain];
  }
}

As you can see, it releases the previous value before retaining the new value.

In your particular case, the autoreleased image returned by -[UIImage imageNamed:] will be automatically retained when you assign it to the property, and then automatically released when you assign another image (or nil) to the property.

1
ответ дан 7 December 2019 в 03:18
поделиться

Из docs :

... если вы планируете удерживать возвращенный объект изображения, вы должны сохранить его, как любой объект Cocoa.

Подразумевается, что если вы больше не хотите удерживать его, вы должны освободить его (при условии, что вы его сохранили).

0
ответ дан 7 December 2019 в 03:18
поделиться

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

UIImage *img = [[UIImage imageNamed:@"file.png"] retain];
0
ответ дан 7 December 2019 в 03:18
поделиться

Правильно, Флорин... но согласно обсуждению выше, если для свойства используется сеттер, который (либо через синтез, либо вручную) делает "retain", то нет необходимости в дополнительном retain.

Другими словами, следующий вариант будет правильным (и свободным от утечек памяти), IMHO, я прав? Я думаю, что это было первоначальной целью вопроса... и я также хотел бы быть уверенным. ;-) thx!

@interface MyClass {
    UIImage *myImage;
}
@property (nonatomic, retain) UIImage *myImage;
@end

@implementation MyClass
@synthesize myImage;

- (void) someMethod {

    self.myImage = [UIImage imageNamed:@"foo.png"];
}

- (void) someOtherMethod {

    self.myImage = [UIImage imageNamed:@"bar.png"];
}

- (void) dealloc {

    self.myImage = nil;
    [super dealloc];
}
@end
6
ответ дан 7 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: