/ / Alguém pode explicar Reter ciclo com exemplo de código (Objetivo C)? e Como podemos remover o ciclo de retenção? (com código) - iphone

Alguém pode explicar o ciclo Retain com código de exemplo (Objective C)? e Como podemos remover reter o ciclo? (com código) - iphone

Qualquer um pode explicar o ciclo de retenção com um exemplocódigo (objetivo C)? e como podemos remover o reter Cycle? (com código ou diagrama). Eu sei sobre isso teoricamente, mas nunca me deparei com esse tipo de programa? Estou muito curioso para ver como o ciclo de retenção resolvido (com código ou diagrama)?

Respostas:

6 para resposta № 1

A delegação é um exemplo em que você deve evitar um ciclo de retenção usando o assign atributo em uma propriedade delegada. Por exemplo, você tem um objeto pai que cria um filho:

self.child = [[[Child alloc] init] autorelease];

Portanto, o pai tem uma referência retida para o filho (porque o configurador da propriedade a retém).

Agora o pai se define como um delegado do filho:

self.child.delegate = self;

Agora, se a criança mantiver seu delegate propriedade há um ciclo de retenção. Ambos contêm referências ao outro e não podem ser desalocados.

Para evitar isso, a criança declara a propriedade delegate com o assign atributo:

@property (nonatomic, assign) id delegate;

Isso é seguro porque um delegado quase sempre sobreviverá ao delegador. Caso contrário, o pai deve definir o delegado do filho como nulo antes que ele vá embora.


2 para resposta № 2

Os aspectos de gerenciamento de memória do Objective-C são muito bem abordados em muitos lugares.

Algumas referências:

  1. http://www.otierney.net/objective-c.html#memorymanagement
  2. http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

Você pode considerar voltar aqui se tiversoluções específicas das quais você não tem certeza, de modo que temos exemplos concretos para comentar. Você postou seu código, não hesite se tiver medo que pareça muito estúpido ou cheio de erros. Essa é a melhor maneira de aprender.