我是新来的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