вопрос новичка по управлению памятью iOs - PullRequest
0 голосов
/ 05 августа 2011

Как правильно написать в этой ситуации:

У меня есть какой-то метод, который возвращает NSMutableArray *.Поскольку метод не запущен с init, new или alloc, как пишут в руководстве по управлению памятью apple, я возвращаю объект autorealese.

-(NSMutableArray*)someMethod {

    NSMutableArray *array = [NSMutableArray alloc] init] autorealese];
    //Some code here
    return array;
}

И у меня есть еще несколько методов, вызывающих этот:как правильно написать этот код?

Ответы [ 2 ]

1 голос
/ 05 августа 2011

В вашем коде нет ничего плохого, кроме того, что method2 вернет автоматически освобожденный массив. Таким образом, все, что вызывает этот метод, должно сохранять возвращаемое значение.

0 голосов
/ 05 августа 2011

Создание автоматически выпущенного массива NSMutableArray и его возврат.

-(NSMutableArray*)someMethod {

        NSMutableArray *array = [NSMutableArray alloc] init] autorealese];
        //Some code here
        return array;
    }

Method1 использует autorelease NSMutableArray от someMethod, и в течение жизни Method1 массив не будет автоматически освобожден. Это одно из правил управления памятью в target-c, согласно которому объект проходит цикл методов.

-(NSMutableArray*)method1 {
     NSMutableArray *array = nil;
     if(condition){
         array = [self someMethod];
     }
     return array;
}

Method2 использует все еще ожидающий автоматического освобождения NSMutableArray из method1. Важно отметить, что в / у вас есть условие в method2, массив может быть nil.

-(NSMutableArray*)method2 {
     NSMutableArray *array = nil;
     array = [self method1];
}

Другими словами, вы передаете автоматически выпущенный объект по вашим методам. В этом нет ничего плохого. Вам просто нужно помнить, что если вы хотите сохранить значение метода method2, вам нужно сохранить его, иначе оно будет автоматически освобождено.

Из-за вашего состояния в method1 анализатор будет жаловаться, потому что не гарантируется, что method1 вернет объект, существует вероятность, что он вернет nil.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...