Как мне выпустить массив, возвращенный из метода класса? - PullRequest
2 голосов
/ 12 июня 2011

У меня есть раздел моего кода, который вызывает метод, возвращающий NSMutableArray примерно так:

+(NSMutableArray *)method {

NSMutableArray *rgb = [[NSMutableArray alloc] initWithObjects:....., nil];

    return rgb;

}

Это дает мне утечку при каждом вызове.Ввод [rgb release]; после return не работает.Если поставить его до return, приложение рухнет.Также добавление autorelease приводит к сбою приложения.Предложения?

Ответы [ 2 ]

7 голосов
/ 12 июня 2011
+(NSMutableArray *)method {
    NSMutableArray *rgb = [[NSMutableArray alloc] initWithObjects:....., nil];
    return [rgb autorelease];
}

В качестве альтернативы:

+(NSMutableArray *)method {
    NSMutableArray *rgb = [NSMutableArray arrayWithObjects:....., nil];
    return rgb;
}

Если это все еще происходит сбой, то проблема, скорее всего, за пределами этого метода, а не внутри.

4 голосов
/ 12 июня 2011

Но это дает мне утечку каждый раз это называется. Положить [релиз RGB]; после возвращения не работает. положить его до возвращения делает мое приложение авария. Также в авто-выпуске вызывает сбой моего приложения. Предложения? * * 1002

Вам необходимо прочитать Рекомендации по управлению памятью какао . Совершенно ясно, что такой метод должен автоматически высвобождать возвращаемый объект:

+(NSMutableArray *)method {
    NSMutableArray *rgb = [[NSMutableArray alloc] initWithObjects:....., nil];

    return [rgb autorelease];
}

Или, альтернативно:

+(NSMutableArray *)method {
    NSMutableArray *rgb = [NSMutableArray arrayWithObjects:....., nil];

    return rgb;
}

Чрезмерное сохранение (как в вашем коде) не вызовет сбой (по крайней мере, до тех пор, пока у вас не закончится память). Если у вас происходит сбой, это, скорее всего, связано с тем, что вы неправильно управляете памятью.

Попробуйте использовать Build and Analyze и исправить все выявленные проблемы. Если это все еще происходит сбой, опубликуйте обратный след, если вы не можете понять, почему.

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