我有一個程序使用ARC並調用一些非ARC的庫方法。ARC調用非ARC非自動釋放方法
非ARC庫:
-(NSMutableData*) bar{
return [[NSMutableData alloc] initWithLength:100];
}
ARC計劃:
- (void)foo
{
NSMutableData* data = [d bar];
}
// Data is leaked
可以避免被泄露數據,而無需更改庫方法返回一個autoreleased對象?
當我在非ARC代碼中使用這個庫時,我用來調用數據釋放,從而避免泄漏。
你非ARC庫如何被打破。修理它。如果你願意,長遠來看,你會好得多。 – bbum 2013-04-23 20:24:49
基本的內存管理規則說(見http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html)「你擁有你創建的任何對象...使用方法,其名稱以「alloc」,「new」,「copy」或「mutableCopy」開頭。由於方法「bar」不是這種情況,ARC程序假定它不是在bar中實例化的對象的所有者,所以它會泄漏。正如Lithu T.V所建議的那樣,修復它的唯一正確方法是返回一個autorelease對象。 – 2013-04-23 21:09:10
也有可能用NS_RETURNS_RETAINED標記該方法,這正是我正在尋找的方法。 – 2013-04-24 19:12:58