Sobes.tech
Junior — Middle

É possível implementar uma referência fraca a um objeto de matriz?

sobes.tech IA

Resposta da IA

No iOS (Objective-C ou Swift), as referências fracas (weak) são geralmente aplicadas a objetos para evitar ciclos de retenção e vazamentos de memória. No entanto, arrays (NSArray, NSMutableArray ou Array em Swift) armazenam por padrão referências fortes aos seus elementos.

Para implementar um array com referências fracas, pode-se usar contêineres especializados, como NSPointerArray com a opção de referências fracas. NSPointerArray permite armazenar referências fracas a objetos e removê-los automaticamente quando o objeto é liberado.

Exemplo em Objective-C:

NSPointerArray *weakArray = [NSPointerArray weakObjectsPointerArray];

NSObject *obj = [[NSObject alloc] init];
[weakArray addPointer:(__bridge void * _Nullable)(obj)];

// Quando obj é liberado, o weakArray será atualizado automaticamente

Em Swift, pode-se envolver objetos em contêineres fracos ou usar NSPointerArray através de uma ponte:

let weakArray = NSPointerArray.weakObjects()
let obj = NSObject()
weakArray.addPointer(Unmanaged.passUnretained(obj).toOpaque())

Dessa forma, não há uma referência fraca direta a um array comum, mas pode-se usar NSPointerArray ou criar estruturas próprias com referências fracas.