executeFetchRequest: ошибка: возвращает автоматически освобожденный массив или с retain count = 1 - PullRequest
1 голос
/ 23 июня 2011

В документах для NSManagedObjectContext по методу executeFetchRequest:error: говорится, что он возвращает массив, но в нем не упоминается, был ли массив автоматически освобожден или имеет счет сохранения = 1.

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

Редактировать снова

facepalm

Я проверял счет сохранения до того, как пул авто-релиза ... выпустил его.Спасибо за подсказку о том, чтобы не звонить retainCount - я буду избегать этого в будущем.Это хороший пример, когда я сбился с пути.

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

В соответствии с политикой владения Object , только методы с префиксом «alloc», «new», «copy» и «mutableCopy» возвращают принадлежащий вам объект.executeFetchRequest:error: не является исключением.Следовательно, вы не являетесь владельцем возвращаемого массива, и вы должны требовать владения им, отправив ему сообщение retain, если вам нужно его сохранить.В противном случае оно будет выпущено (в какой-то момент в будущем).

Фактическое значение retainCount не имеет значения.

2 голосов
/ 23 июня 2011

Возвращает объект, который исчезнет когда-нибудь в будущем, если вы не сохраните его. Является ли это автоматическим выпуском или нет - это деталь реализации. Кроме того, вы не можете сказать, является ли что-либо автоматически выпущенным.

Также:

Не звоните retainCount

Это бесполезно; абсолютный счетчик сохранения объекта является деталью реализации и может принимать любое количество значений без видимой причины

...