Considera un caso come questo:
@interface Father : NSObject
@property Child* child;
@end
@interface Child : NSObject
@property Father *father;
@end
Father *father = [Father new];
Child *child = [Child new];
father.child = child;
child.father = father;
I due oggetti
non verranno rilasciati (provare per credere). Ogni oggetto è proprietario dell' altro e i due si bloccano a vicenda. Per ovviare a questo problema bisogna scrivere:
@interface Child : NSObject
@property (weak) Father *father;
@end
Mettendo
Weak si indica che quel puntatore non ha la proprietà dell' oggetto e quindi non viene considerato nel conteggio dei riferimenti.