弱引用数组NSPointerArray的使用

//初始化一个弱引用数组对象
_weakPointerArray = [NSPointerArray weakObjectsPointerArray];
for(int i=0;i<10;i++){
    NSObject *obj = [NSObject new];
    //往数组中添加对象
    [_weakPointerArray addPointer:(__bridge void * _Nullable)(obj)];
}
//输出数组中的所有对象,如果没有对象会输出一个空数组
NSArray *array = [_weakPointerArray allObjects];
NSLog(@"%@",array);
//输出数组中的元素个数,包括NULL
NSLog(@"%zd",_weakPointerArray.count);//此时输出:10,因为NSObject在for循环之后就被释放了
//先数组中添加一个NULL
[_weakPointerArray addPointer:NULL];
NSLog(@"%zd",_weakPointerArray.count);//输出:11
//清空数组中的所有NULL,注意:经过测试如果直接compact是无法清空NULL,需要在compact之前,调用一次[_weakPointerArray addPointer:NULL],才可以清空
[_weakPointerArray compact];
NSLog(@"%zd",_weakPointerArray.count);//输出:0
//注意:如果直接往_weakPointerArray中添加对象,那么addPointer方法执行完毕之后,NSObject会直接被释放掉
[_weakPointerArray addPointer:(__bridge void * _Nullable)([NSObject new])];
NSLog(@"%@",[_weakPointerArray allObjects]);//输出:空数组 NSPointArray[7633:454561] ()
//应该这样添加对象
NSObject *obj = [NSObject new];
[_weakPointerArray addPointer:(__bridge void * _Nullable)obj];
NSLog(@"%@",[_weakPointerArray allObjects]);//输出:NSPointArray[7633:454561] ("")
/*
 同样的:NSMapTable对应NSDictionary,NSHashTable对应NSSet
 */

作者:DevWin
链接:https://www.jianshu.com/p/551ece41b42b
來源:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(弱引用数组NSPointerArray的使用)