我遇到了NSTimer
和userInfo
的問題。
在the docs蘋果寫道,系統保持強烈的引用定時器(並因此userInfo?),雖然有時當我試圖訪問userInfo對象的部分我得到一個壞訪問異常。 (據我所知,這意味着什麼非常糟糕的事情)NSTimer用戶信息不良訪問異常
事不宜遲,這裏是我的物體看起來像我傳遞給用戶信息:
@interface MyObject
@property (nonatomic, assign) u_int8_t cmd;
@property (nonatomic, assign) NSNumber *_id;
@end
這裏就是我如何設置定時器:
NSTimer *myTimer = [NSTimer timerWithTimeInterval:10 target:self selector:@selector(someMethod:) userInfo:message repeats:NO];
[[NSRunLoop mainRunLoop] myTimer forMode:NSDefaultRunLoopMode];
是被觸發,當定時器觸發
-(void) someMethod:(NSTimer *)timer{
MyObject* mObject = [timer userInfo];
u_int8_t cmd = mObject.cmd; // This works
NSNumber *_id = mObject._id; // Bad access
}
注意的方法:用戶信息我自己不是零。 u_int8_t
也沒有或者無論如何。但只要我嘗試訪問NSNumber
對象我收到了以下異常(不一定每次):
Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x00000000
如果我添加strong
屬性爲NSNumber的對象會發生什麼?這會解決這個問題,爲什麼?爲什麼這個問題首先發生?
您正在訪問與您的標題定義不同的屬性,您是否可以更新您的代碼? –
@TomášLinhart你是對的 - 只需更新它,謝謝。 – user3420815