强制ARC通过void指针保留对象引用

时间:2012-12-06 02:55:32

标签: objective-c pointers automatic-ref-counting

假设我有这个属性:

@property (nonatomic, readwrite) void*** array;

使用objective-c对象初始化数组:

- (id) init
{
    if(self=[super init])
    {
        array= malloc(10*sizeof(void**));
        for(NSUInteger i=0; i<10; i++)
        {
            array[i]= malloc(10*sizeof(void*));
            for(NSUInteger j=0; j<10; j++)
            {
                array[i][j]= (__bridge_retained void*) @"Hello";
            }
        }
    }
    return self;
}

然后我发现该对象并未真正保留:

 Custom* c=[Custom new];
 NSLog(@"%@",(__bridge NSString*)c.array[40][40]);

这打印(null),我以为保留了强制保留对象的桥,如何绕过这个?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用'id'类型而不是'void'类型。

'id'也是抽象的。

答案 1 :(得分:0)

你得到nil(或随机垃圾)的原因是因为你用10个元素分配和填充你的数组,然后你尝试访问第40个元素。