NSStringFromCGPoint возвращает автоматически освобожденный объект? - PullRequest
0 голосов
/ 11 марта 2012

Вопрос # 1 Будет ли NSStringFromCGPoint() возвращать объект автоматического освобождения или объект должен быть освобожден?

Вопрос # 2 Когда у вас есть свойство: @property (nonatomic, retain) NSString *someString; И вы устанавливаете его так: self.someString = [[[NSString alloc] initWithString: @ "Something"] autorelease];

Это:

[someString release];
someString = nil;

равно

self.someString = nil;

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Включает ли вызов термин «новый», «распределить», «копировать» или «создать»? Если нет, вы получаете объект, который вам не принадлежит (вы можете предположить, что он либо автоматически освобожден, либо ссылка находится в другом месте).

1 голос
/ 11 марта 2012
  1. Я не проверил это специально, но по соглашению эти виды функций возвращают автоматически выпущенные объекты. Возможно, вы сможете проверить это самостоятельно, настроив минимальный, не ARC-проект и вызвав -retainCount на том, что вы получаете из функции, но я не уверен. (И вообще, retainCount не то, что вы хотите использовать.)

  2. Да. Синтезированный сеттер выглядит примерно так:

    - (void)setSomeString:(NSString *)string
    {
        if (string != someString) {
            [someString release];
        }
        someString = [string retain];
    }
    

Таким образом, независимо от того, вызываете ли вы его явно или с помощью точечной нотации, старое значение освобождается (и для базового значения ивара устанавливается значение nil или что бы вы ни передавали).

Кроме того, я не уверен, что вы просто делали это для случайного примера, но вам не нужно переносить строковый литерал в код управления памятью, чтобы передать его в средство доступа к свойству. (То есть self.someString = @"Something" в порядке.)

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