iPhone Dev - Вопрос об авто-выпуске и о том, безопасно ли то, что я делаю - PullRequest
0 голосов
/ 18 июля 2011

У меня есть следующий код в методе моего приложения:

NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];

[someObject someMethodThatTakesAnArray:array];

Я знаю, что метод arrayWithObjects возвращает автоматически освобожденный массив. Значит ли это, что я должен сохранить его сразу после его создания? Гарантируется ли, что пул автоматического выпуска не будет очищен до того, как я передам массив someMethodThatTakesAnArray? Как насчет того, когда это входит в метод? Если я никогда не сохраню его, массив может потенциально исчезнуть, пока я использую его внутри someMethodThatTakesAnArray, не так ли?

Ответы [ 2 ]

3 голосов
/ 18 июля 2011

Пул автоматического выпуска не очищается до следующего прохода цикла событий обслуживаемого потока. Это не произойдет, пока вы работаете внутри вашего текущего метода. Так что да, массив безопасен для использования некоторыми методами, которые используются для меток: тебе не нужно беспокоиться.

Управление событиями: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/Introduction/Introduction.html

Управление памятью: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

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

До того, как ваш метод вернется, у пула авто-выпусков не будет возможности слить. То, что вы здесь делаете, хорошо, если вам не нужен этот массив, кроме как передать его в -someMethodThatTakesAnArray:

...