众所周知,当您将一个对象添加到数组(NSMutableArray)或字典(NSMutableDictionary)中时,它会创建对该对象的强引用。
是否可能以弱引用的方式将对象添加到数组中?
众所周知,当您将一个对象添加到数组(NSMutableArray)或字典(NSMutableDictionary)中时,它会创建对该对象的强引用。
是否可能以弱引用的方式将对象添加到数组中?
1.NSValue
+ (NSValue *)valueWithNonretainedObject:(id)anObject
如果您想将一个对象添加到集合中但不希望集合对其创建强引用,则可以使用此方法。
2.有一种巧妙的方法可以使用块来实现:
typedef id (^WeakReference)(void);
WeakReference MakeWeakReference (id object) {
__weak id weakref = object;
return ^{ return weakref; };
}
id WeakReferenceNonretainedObjectValue (WeakReference ref) {
if (ref == nil)
return nil;
else
return ref ();
}
[arr addObject:MakeWeakReference(obj)];
id newobj = WeakReferenceNonretainedObjectValue([arr objectAtIndex:0]);
3. 使用自定义的 WeakReference 类来保存对值的弱引用。
实际上,上述方法的设计思想是相同的。
NSMutableArray *arrayStrong = [NSMutableArray arrayWithObjects:
[[yourClass alloc] init],
[[yourClass alloc] init], nil];
NSPointerArray *arrayWeak = [NSPointerArray weakObjectsPointerArray];
for(yourClass *obj in arrayStrong){
[arrayWeak addPointer:(__bridge void*)(obj)];
}
NSValue valueWithNonretainedObject:
来强制存储一个值,该值弱引用您的目标对象。__weak typeof(object) weakObject = object; [NSMutableArray addObject:weakObject];
是否可行?或者是 [NSMutableArray addObject:(id)object];
。 - nhgrif
[NSPointerArray weakObjectsPointerArray]
。 - Borzh