2012-12-02 85 views
1

我想要Objective-C++將NSArray的內容複製到使用自動引用計數的項目中的std :: vector中。
當我寫這篇文章:不能使用ARC將NSArray複製到std :: vector使用ARC

NSArray* array; 

... 

std::vector<id> buffer; 
buffer.reserve(array.count); 

[array getObjects:&buffer[0] range:NSMakeRange(0, array.count)]; 

getObjects:range:結果在這個錯誤召喚:
Cannot initialize a parameter of type '__unsafe_unretained id *「與'__strong id *類型的rvalue

在網絡上一些網站的搜索表明,也許是__bridge需要施放。使用此代碼:
[array getObjects:(__bridge id*)&buffer[0] range:NSMakeRange(0, array.count)];

結果在此錯誤
Incompatible types casting '__strong id *' to '__strong id *' with a __bridge cast

是需要該陣列的對象可以被拷貝到載體中什麼?

+0

它看起來像我已經解決了它。下面是我做的代碼編譯成功: \t __unsafe_unretained id * data = reinterpret_cast <__ unsafe_unretained id *>(&buffer [0]); \t \t [self getObjects:data range:NSMakeRange(0,self.count)]; –

回答

3

我通過這樣做了我的代碼工作;

std::vector<__unsafe_unretained id> buffer(array.count); 
[array getObjects:&buffer[0] range:NSMakeRange(0, array.count)]; 

的載體是一種方法裏面的棧上的局部對象,因此它超出範圍,不需要守住數組元素