Я понял, что после того, как вы выпустили объект, вы не должны его использовать, так как это вызовет ошибку, поскольку оно больше не в памяти.Освобождение объекта, но все еще способное его использовать
Но чтение через this Apple guide, я нашел этот код, а также видел его раньше, но я бы просто переместил [object release]
в конец моего кода, чтобы избежать ошибки. Но кажется, что это принято и работает. Итак, почему это работает? Как он может поддерживать настройку переменных до dateAttribute
после того, как он будет выпущен?
(линия 3 является один в вопросе):
NSMutableArray *runProperties = [NSMutableArray array];
NSAttributeDescription *dateAttribute = [[NSAttributeDescription alloc] init];
[runProperties addObject:dateAttribute];
[dateAttribute release];
[dateAttribute setName:@"date"];
[dateAttribute setAttributeType:NSDateAttributeType];
[dateAttribute setOptional:NO];
Понял здесь: Creating a managed object model in code
Отредактировано для удаления ссылки на 'keepCount'. Концепция dropping to 0 действительна, но 'keepCount' никогда не может вернуть 0 по очевидным причинам. – bbum
Изменяет ли компилятор 'dateAttribute' на адрес памяти? Потому что для меня, даже если массив делает другое 'сохранение' на объекте, это все еще два разных указателя (один называется dateAttribute, другой называется runProperties [0]). Итак, если я выпущу 'dateAttribute', я думаю, что я освобождаю указатель на этот объект, и единственным способом использования этого объекта будет' [[runProperties objectAtIndex: 0] setSomething: blah]; ' – elcool
Нет, атрибут dateAttribute указывает на тот же адрес после выпуска, и независимо от того, что освобождение вызывает освобождение или нет. – tia