弱引用数组NSPointerArray的使用

2018-05-31  本文已影响35人  海浪萌物
//初始化一个弱引用数组对象
_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] ("<NSObject: 0x6000000078c0>")
/*
 同样的:NSMapTable对应NSDictionary,NSHashTable对应NSSet
 */

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

猜你喜欢

热点阅读