Objective-c указатели - PullRequest
       20

Objective-c указатели

2 голосов
/ 01 июля 2011

Я не знаю, как удалить указатель, но не объект, например: У меня есть класс:

@interface model : NSObject {
NSMutableArray *tab;
}

И когда я делаю это:

model1 = [[model alloc]init];
NSMutableArray * tab2 = [model1 tab];
...
some operations
...

Я хочу удалить только указатель на мою вкладку, которая является * tab2, но когда я выпускаю tab2, вкладка также освобождается. В C ++, когда я очищаюсь, я делаю это:

int a =10;
*w = &a;

и когда я удаляю указатель, сделайте

delete w;

и переменная a все еще находится в памяти, и это нормально. Что я должен сделать в obj-c, чтобы удалить только указатель?

Ответы [ 3 ]

7 голосов
/ 01 июля 2011

В вашей ситуации с Objective-C нет причин удалять указатель. Просто позволь этому выпасть из сферы видимости. Вы не размещаете новые объекты. Вы не делаете копию вкладки. Вы не сохраняете это. Вы просто создаете еще один указатель на исходный объект вкладки. Если хотите, вы можете установить tab2 = nil, но в любом случае это не имеет значения.

Во втором примере C ++ я не уверен, но вы, вероятно, впадаете в неопределенное поведение из-за того факта, что приведенный вами пример кода действительно работает на тестируемом вами компиляторе! Недопустимо C ++ для удаления указателя, не созданного с помощью new.

1 голос
/ 01 июля 2011

tab2 = ноль;Никакой вид выпуска или удаления не требуется.Смотрите основы управления памятью в iOS документах.Вам нужно беспокоиться об объектах и ​​освобождать их только тогда, когда вы используете новое, alloc, retain или copy.

0 голосов
/ 01 июля 2011

В target-c, если вы не вызываете alloc, copy, new или сохраните объект, вам не нужно его освобождать.Если вы хотите создать указатель, от которого вы можете избавиться, вы, вероятно, захотите сделать копию объекта.

NSMutableArray * tab2 = [model1 tab] copy];

или

NSMutableArray *tab2 = [model1 tab] mutableCopy];

, тогда вы можете освободить tab2, когдавы закончили с этим, и tab1 все еще будет существовать.

Надеюсь, это имеет смысл.

...