#objective-c #xcode #object #nsmutablearray #release
#objective-c #xcode #объект #nsmutablearray #выпуск
Вопрос:
В моем проекте данные, считываемые из базы данных, присваиваются выделенному объекту. После добавления объекта в NSMutableArray. И затем объект освобождается. Есть ли какие-либо проблемы с этим? Мой исходный код:
while (sqlite3_step(statement) == SQLITE_ROW)
{
TopicEntry *temp = [[TopicEntry alloc] init];
ruleName = (char *)sqlite3_column_text(statement, 2);
[temp setTopicName:(ruleName) ?[NSString stringWithUTF8String:ruleName] :@""];
[temp setParentID:(int)sqlite3_column_int(statement, 2)];
[rules addObject:temp];
[temp release];
}
Ответ №1:
Ваш код в порядке.
Единственное, о чем вам нужно подумать, это то, что когда вы являетесь владельцем объекта, вам нужно его освободить. Вызов init
метода делает его вашим владельцем, поэтому в соответствии с политикой вы должны освободить его, независимо от того, что вы с ним делаете. Вы можете прочитать все о политике здесь .
Кроме того, NSMutableArray
будут сохранены объекты, переданные ему через addObject
. Но это не то, как вы должны думать об этом, и может рассматриваться как деталь реализации. Все, что имеет значение, — это политика владения.
Комментарии:
1. у меня есть сомнения, пожалуйста, помогите мне. если бы я написал так: TopicEntry * t = [TopicEntry alloc] init]; t = [topic objectAtIndex:0]; // сделал что-то [t release]; этот код освободит фактический объект в NSMutableArray? Пожалуйста, помогите, я новичок в этой области
Ответ №2:
Нет, ваш код выглядит нормально в том, что касается выделения памяти.
Ответ №3:
Я бы сказал, что это был именно правильный способ сделать это. rules
сохранит временный объект при его добавлении и освободит его при его освобождении (или удалении объекта).