Проверка объекта iPhone на выпуск - PullRequest
2 голосов
/ 20 апреля 2011

Я хочу проверить, имеет ли объект какое-то количество или нет. Вот мой тестовый код

NSMutableArray  *array=[[NSMutableArray alloc]init];

    if(array)
    {
        NSLog(@"hiiiiiii"); 
    }

CASE-2

NSMutableArray  *array=[[NSMutableArray alloc]init];
    [array release];
    if(array)
    {
        NSLog(@"hiiiiiii"); 
    }

Здесь в обоих случаях я получил такой же вывод, какнапечатано "hiiiiiii".

Может кто-нибудь сказать мне, как я буду проверять, должен ли мой объект выпустить или уже выпущен.

Я знаю, что я должен отслеживать счетчики моего объекта, но я вэтап, когда мой код слишком сложен, и мне нужна помощь ..

Пожалуйста, помогите ..

А также скажите, сколько утечки памяти допускает яблоко?

Ответы [ 2 ]

4 голосов
/ 20 апреля 2011

Нет способа проверить, следует ли вам «освобождать» объект.Выполнение чего-то вроде «if (object)» проверяет только указатель на объект.Он вернет true, даже если объект, на который он указывал, был разрушен давным-давно.Это то, что происходит в вашем втором случае.Объект уничтожается при вызове release, но указатель все еще указывает на что-то, поэтому он возвращает true.Он вернет false только если указатель установлен на nil.

Однако, существует простой набор правил для вызова release.Если вы когда-либо вызываете «alloc», «new», «copy», «mutableCopy» или «retain» для объекта, вы должны всегда вызывать «release» или «autorelease» для него.Это предотвратит любые утечки памяти.

Apple не имеет разрешенного количества утечек памяти.Всегда безопаснее устранить любые известные утечки памяти;Кроме того, это будет означать лучшую производительность для ваших клиентов.

4 голосов
/ 20 апреля 2011

Во втором случае вы освобождаете NSMutableArray, но он по-прежнему хранит значение , отличное от нуля , хотя оно больше не используется (для вызова функции ИЛИ для извлечения значения).true.

Просто помните, что когда вы вызываете release для любого объекта, не забудьте присвоить nil этому, поэтому ваш второй код должен выглядеть следующим образом.

CASE-2

NSMutableArray  *array=[[NSMutableArray alloc]init];
    [array release];
     array = nil;
    if(array)
    {
        NSLog(@"hiiiiiii"); 
    }

В Object-C существует простое правило управления памятью, если ваш выделенный или сохраняет любой объект, который вам необходимпозвоните по этому вопросу,

Прочтите руководство по управлению памятью от Apple.

...