Справочный документ по API UIImage: -
initWithContentsOfFile:
Инициализирует и возвращает объект изображения с содержимым указанного файла.
- (id)initWithContentsOfFile:(NSString *)path
Параметры
путь
Путь к файлу. Этот путь должен включать расширение имени файла, определяющее тип данных изображения.
Возвращаемое значение
Инициализированный UIImage объект , или nil , если метод не может найти файл или инициализировать изображение из его содержимого.
Учитывая этот сценарий, предположим, у меня есть класс, это может быть расширение любого класса. Просто взял UIImage например.
@interface myImage : UIImage
{
BOOL isDefaultSet;
}
-(id)initWithDefaultImage;
@end
@implementation myImage
-(id)initWithDefaultImage
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"someInvalidImage" ofType:@"png"];
idDefaultSet = YES;
return [self initWithContentsOfFile:path];
}
@end
//somewhere in other class:
NSString *path = [[NSBundle mainBundle] pathForResource:@"someInvalidImage" ofType:@"png"];
myImage *myObject = [[myImage alloc] initWithDefaultImage];
UIImage *yourObject = [[UIImage alloc] initWithContentsOfFile:path];
теперь здесь в обоих случаях
«alloc» дает «retainCount + 1»
и если
initWithDefaultImage / initWithContentsOfFile
вернул ноль из-за какой-то проблемы - допустим (неверный путь к файлу), эта память будет вытекать как
MyObject / yourObject
будет установлен в ноль, даже если выделение было сделано до init .
Я видел много реализаций для расширенных классов / интерфейсов таким образом. Я запутался, как память обрабатывается здесь? Кто-нибудь может поделиться мнением по этому поводу?