Могу ли я выпустить несколько объектов с одной строкой в ​​Objective-C? - PullRequest
0 голосов
/ 16 января 2011

Я создал кучу объектов и теперь должен написать несколько строк, чтобы освободить их.

[Object1 release];
[Object2 release];
...
[ObjectN release];

Как я могу выпустить все, используя одну строку?

Ответы [ 3 ]

1 голос
/ 16 января 2011

Может быть способ освободить несколько объектов, используя одну строку, но я не рекомендую это.Есть хороший способ безопасного освобождения объектов:

#define RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }

Использование:

RELEASE_SAFELY( myObject );    
0 голосов
/ 17 января 2011

Здесь есть несколько ответов о прямом кодировании, просто хотелось добавить некоторые другие подходы.

Вы можете автоматически высвобождать объекты во время создания и добавлять их в массив или другую коллекцию. Массив сохраняет объекты, а метод dealloc освобождает массив, массив освобождает все объекты. Похоже на пул авто-релиза.

Во-вторых, каков жизненный цикл объекта? Если у вас есть цикл, создающий все объекты, и вы нуждаетесь в них только по одному за раз, вы можете создать / использовать / сдать в очередь или повторно использовать в цикле, например

for(...)
{
    [[object init] alloc];
    [object method];
    [object release];
}

или даже

[[object init] alloc];
for(...)
{
    [object setProperties];
    [object method];
}
[object release];
0 голосов
/ 17 января 2011
#define foreach(item, array) \     
    for(int keep = 1, \
         i= 0,\
         size = sizeof (array) / sizeof *(array); \
     keep && i != size; \
     keep = !keep, i++) \
   for(item = array + i; keep; keep = !keep) 

#define RELEASE_ALL(OBJS...)    ({id objs[]={OBJS}; \
                          foreach(id* v, objs) { RELEASE_SAFELY(*v); }})

Почему бы не иметь лучшее из обоих миров? RELEASE_SAFELY (благодаря WrightsCS ) сразу все ваши объекты:

RELEASE_ALL(Object1, Object2, Object3) // etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...