我是新來的ios編程。我已閱讀了Apple開發者內存指南和ARC指南,並且我認爲我已經理解了內存管理,但事實上我沒有。objective-c內存訪問失敗
請幫我確定哪裏出錯,爲什麼它是錯的,謝謝。
首先,整個程序,如果我沒有錯,是啓用ARC。
NSDate *expireDate = nil;
//using debug, expiresIn = 86400
id expiresIn = [responseObject valueForKey:@"expires_in"];
if (expiresIn != nil && ![expiresIn isEqual:[NSNull null]]) {
//using debug, expireDate = currentDate + 1day
expireDate = [NSDate dateWithTimeIntervalSinceNow:[expiresIn doubleValue]];
}
[credential setExpiration:expireDate];
並查看證書setExpiration實施,
@property (readwrite, nonatomic) NSDate *expiration;
- (void)setExpiration:(NSDate *)expireDate
{
//using debug, expireDate = currentDate + 1day
if (!expireDate) {
return;
}
// oops, the following line, caused exc_bad_access
// (code = 2, address=0xxxxxxx)
// and after the exception occurs, expireDate = nil in debug window
self.expiration = expireDate;
}
的錯誤是,在self.expiration = EXPIREDATE導致內存訪問故障異常(EXC_BAD_ACCESS),這讓我迷惑。將expireDate釋放在if(!expireDate)和self.expiration = expireDate之間的某個地方?
我真的不明白爲什麼會發生這種情況,請大家幫忙。
再次感謝。
===========
感謝您的回答,
我改_expiration = EXPIREDATE,那麼異常了。
但是,爲什麼NSString的工作原理(無一例外),但是NSDate *沒有?
@property (readwrite, nonatomic) NSString *refreshToken;
- (void)setRefreshToken:(NSString *)refreshToken
{
if (!refreshToken) {
return;
}
self.refreshToken = refreshToken;
}
一nd錯誤是? –
嗨,錯誤發表評論,謝謝。我會更加清楚。 – user534498
你應該改變!refreshToken in refreshToken == nil。在這種情況下(或一般iOS)沒有問題,但這在其他一些編程語言中不起作用。最好使用refreshToken == nil。 – user1567896