O que você deve saber sobre o mortal reter ciclo de desenvolvimento ios

ARC funciona muito bem para gerenciar a memória para 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 esse objeto quando ele sai do escopo, então se é uma variável de instância, ele vai ficar no escopo até que 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. É somente quando o será lançado retainIt variável sai do escopo (é __Forte por padrão). Neste caso, ele será liberado e depois desalocadas (assumindo que nenhum outro objeto toma posse), no final de viewDidLoad porque o retainIt variável vai sair do escopo:

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

Mas quando você cria o RetainIt objecto, no RetainIt método de inicialização da classe, nisso,você cria um Ciclo objeto e atribuí-lo ao ciclo variável de instância que você declarou. Como você poderia esperar, o Ciclo objecto será mantido até a RetainIt desatribuído objecto é porque isto é referenciado por uma variável de exemplo, que permanece no espaço até que o objecto é desatribuído:

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


Você também, no entanto, atribuir ao Ciclo objeto de retainIt propriedade uma referência de volta para o RetainIt objeto. o Ciclo classe se parece com isso:

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

Isto significa que o RetainIt objeto não será desatribuído até o Ciclo objecto é desatribuído, eoCiclo objeto somente quando o será desalocada RetainIt objecto é desatribuído. 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 (seja diretamente ou através de uma cadeia de outros objetos, cada um com um Forte de referência para o próximo que conduz de volta para o primeiro).

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

@property (fraco nonatomic,) * RetainIt retainIt-

Publicações relacionadas