O que você deve saber sobre o ciclo mortal Reter para o Desenvolvimento iOS App

ARC funciona muito bem gerir a memória do seu aplicativo iOS exceto em uma circunstância. Você precisa entender como essa circunstância pode surgir, eo que você precisa fazer para impedir que aconteça.

Quando você cria um objeto, o compilador garante que a propriedade é transferida e está tudo bem. O compilador irá liberar o objeto quando ele sai do escopo, por isso, se é uma variável de instância, ele vai ficar no escopo até o objeto em si é desalocada.

Você vai passar por este processo utilizando um pequeno programa chamado RetainCycle.

Crie um novo RetainIt objeto no viewDidLoad método de sua RetainCycleViewController objeto. É apenas quando o será lançado retainIt variável sai do escopo (é __Forte por padrão). Neste caso, vai ser libertado e, em seguida, desatribuído (assumindo que nenhum outro objecto apropria) no final de viewDidLoad porque o retainIt variável vai sair do âmbito de aplicação:

- (Void) viewDidLoad {[super viewDidLoad] - RetainIt * retainIt = [[RetainIt novo] de inicialização] -}

Mas quando você cria o RetainIt objeto, na RetainIt método de inicialização de classe, nisso,você cria um Ciclo objeto e atribuí-lo ao ciclo instância variável que você declarou. Como você poderia esperar, o Ciclo objeto será retido até que a RetainIt objeto é desalocada porque ele é referenciado por uma variável de instância, que permanece no escopo até que o objeto é desalocada:

- (Id) {Init auto = [Super inicialização] - se (auto) {self.cycle = [[Ciclo de novo] de inicialização] - cycle.retainIt = auto-} return auto-}

Também, no entanto, atribuir ao Ciclo o objetivo de retainIt propriedade uma referência de volta para o RetainIt objeto. o Ciclo classe tem esta aparência:

Ciclo @interface: NSObject @ propriedade (nonatomic forte,) RetainIt * retainIt - d

Isto significa que o RetainIt objeto não será desatribuído até o Ciclo objeto é desalocada, eoCiclo objeto somente quando o será desalocada RetainIt objeto é desalocada. Gritos!

Embora este exemplo pode parecer um pouco artificial, ele realmente pode ocorrer na vida real quando você tem um objeto com um ponteiro de volta para o objeto que cria-lo (diretamente ou através de uma cadeia de outros objetos, cada um com um Forte de referência para o próximo levando de volta para o primeiro).

image0.jpg

O __fraco qualificadores de vida para objetos cuidar do presente. A solução é fazer com que o ponteiro de volta qualifier vida __fraco.

@property (fraca nonatomic,) RetainIt * retainIt-

menu