Добавлен объект в массив NSMutable и выпущен

#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 сохранит временный объект при его добавлении и освободит его при его освобождении (или удалении объекта).