美文网首页
弱引用数组NSPointerArray的使用

弱引用数组NSPointerArray的使用

作者: 海浪萌物 | 来源:发表于2018-05-31 10:29 被阅读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
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

    相关文章

      网友评论

          本文标题:弱引用数组NSPointerArray的使用

          本文链接:https://www.haomeiwen.com/subject/rbzfsftx.html