2012-12-06 51 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

我正在走出界限。 –