это правильно, возвращая дату повторного управления памятью? - PullRequest
2 голосов
/ 17 мая 2011

это правильно, возвращая управление памятью по дате?

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

Итак, код в методе, который у меня есть:

- (NSDate*)dateForMyTest {
     return [[self.endDate copy] autorelease];
}

Я предполагал, что мне нужно автоматически выпустить его, чтобы вызывающий не делал этого, так как они бы сами не вызвали init / copy / etc.

Ответы [ 4 ]

2 голосов
/ 17 мая 2011

Вы правы, насколько это возможно.Но обратите внимание, что NSDate является неизменным, поэтому на самом деле нет причин не просто возвращать self.endDate.

2 голосов
/ 17 мая 2011

Может работать, но создание копии не обязательно.NSDate является неизменным и не может быть отредактировано позже.

Этого должно быть достаточно ...

- (NSDate*)dateForMyTest {
     return self.endDate;
}
0 голосов
/ 17 мая 2011

Копирование с автоматическим выпуском может понадобиться, если приложение использует nsoperations / threads и т. Д. Но вы можете быть уже в потоке безопаснее - или нет: При использовании

return self.endDate

может произойти любое количество вещейв зависимости от того, как была установлена ​​собственность.Было ли это

 @property (retain) endDate; 

, или более распространенным, более быстрым и менее безопасным для потоков

 @property (nonatomic, retain) endDate; 

Это так сложно, как вам нравится!

В чем разница между атомарными и неатомарными атрибутами?

0 голосов
/ 17 мая 2011

Да, это правильно.Поскольку имя метода не включает init / copy / new, вы должны выполнить авто-выпуск.

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