Назначение объектов в Objective-C, управление памятью - PullRequest
1 голос
/ 23 июля 2011

У меня был супер нубский вопрос о назначении объектов в target-c.Я в основном пытаюсь создать массив миниатюр для использования.У меня есть этот код из другого поста.

+ (UIImage *)scale:(UIImage *)image toSize:(CGSize)size
{
    UIGraphicsBeginImageContext(size);
    [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return scaledImage;
}

В моем viewDidLoad я делаю это:

// Create thumbnail images to be used in UITableView.
    NSMutableArray *imageArray = [[NSMutableArray alloc] initWithCapacity:[_list count]];  // list is an array that has my data
    for (id *test in _list) {
        UIImage *cardImage = [UIImage imageNamed:test.ImageFile];  // line 1
        cardImage = [UIImage scale:cardImage toSize:CGSizeMake(50, 50)];  // line 2
        [imageArray addObject:cardImage];  // line 3
    }
    self.List = imageArray;
    [imageArray release];

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

В строке 1 создается авторелизированный UIImage с именем cardImage.

Строка 2 создает еще один UIImage из scale: toSize: метод.(Я не уверен, является ли этот UIImage автоматически выпущенным или нет).cardImage теперь указывает на этот новый UIImage, созданный в строке 2, и позднее автоматически очищенный UIImage из строки 1. будет очищен.

Строка 3 добавляет этот новый объект в imageArray.

Я не был уверенесли это было правильно / неправильно / хорошо / плохо и т. д. Я знаю, что с примитивными типами в методе вы можете сделать

int x = 5;
x = 10;

Но я не был уверен, создавал ли здесь утечку памяти, выполняяэто, и если бы был лучший метод.Большое спасибо!

1 Ответ

2 голосов
/ 23 июля 2011
+ (UIImage *)scale:(UIImage *)image toSize:(CGSize)size
{
    ...
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    ...
    return scaledImage;
}

UIGraphicsGetImageFromCurrentImageContext возвращает автоматически выпущенное изображение, как и scale:toSize:. Поэтому ваша петля не протекает.

Вашей первой подсказкой могло быть имя: scale:toSize:. Согласно Правилам управления памятью , только те методы, имена которых начинаются с "alloc", "new", "copy" или "mutableCopy", возвращают ваши собственные объекты. Другие методы возвращают объекты, которыми вы не владеете.

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