[英]Strange BAD_ACCESS error
這聽起來可能是個新手問題,但是我是iOS開發新手,
最近,我改用ARC,並且代碼中出現以下問題。 我已經用以下init方法實現了一個類
- (id)init
{
self = [super init];
if (self) {
TokenManager* tokenManager = [[TokenManager alloc] initWithApikey:<my valid token>];
mRequest = [[GeoCodingRequest alloc] initWithApikey:apiKey withOptions:nil tokenManager:tokenManager];
mRequest.delegate = self;
}
return self;
}
其中接口中的mRequest
聲明如下__strong GeoCodingRequest* mRequest;
在同一個類的其他方法中,我像這樣向mRequest
發送一條消息
[mRequest findObject:<some valid array> around:<some valid location> withDistance:<some valid radius>];
當消息發送到對象應用程序時,崩潰並顯示以下消息
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString appendRequestWithToken:]: unrecognized selector sent to instance 0x8974640'
findObject: around: withDistance:
-是公共庫中的一種方法,因此我無法訪問其實現。
請幫助我了解為什么會發生此崩潰? 我猜這是來自ARC _ 強/ _弱限定符用法或污穢。
該消息表示mRequest
已被釋放,因為字符串現在正在使用以前為mRequest
分配的mRequest
。
您應該在啟用Zombies的情況下運行您的應用,以了解何時釋放mRequest
。
看起來tokenManager
沒有被請求保留(這是庫中的錯誤)。 由於它沒有保留在任何地方,因此將tokenManager
釋放,並可以在同一位置分配一個新對象(這里是NSString
的實例)。
您需要將tokenManager
存儲在一個強大的實例變量中 (與mRequest
),以便在請求需要時保留它。
如果您有任何弱引用,請嘗試使用
MyObject * strongMyObject = weakMyObject;
if(strongMyObject){
NSLog(@"This is not released");
}
當您的參考文獻薄弱時,這是一個好習慣。 嘗試這個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.