2012-12-06 48 views
0

比方说,我有这样的特性:力ARC保留一个空指针的对象引用

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

和init用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),我认为桥梁保留铸造力量保留对象,如何去解决这个问题?

+1

我很困惑。为什么不只是输入正确? – Chuck

+1

你为什么要这样的指针?为什么不使用NSArray,你似乎仍然持有NSObject?此外,它可能会打印零或其他垃圾,因为它没有40个元素。 –

+0

这是问题所在。我没有使用id来测试“强制ARC保留对象”的方式。 –

回答

0

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

0

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

'id'也是抽象的。

+0

我正在走出界限。 –