rus*_*elf 7 iphone objective-c
我在我的iPhone项目中获得了一行EXC_BAD_ACCESS(SIGBUS):
if (timeoutTimer) [timeoutTimer invalidate];
Run Code Online (Sandbox Code Playgroud)
令我难过的是我不明白该行怎么会崩溃,因为if语句意味着要检查nil.我是否误解了Objective-C的工作方式,或者在崩溃语句中的行号有时会出现错误的行?
Chu*_*uck 16
仅仅因为变量设置nil
为非其他值并不意味着它指向有效对象.例如:
id object = [[NSObject alloc] init];
[object release];
NSLog(@"%@", object); // Not nil, but a deallocated object,
// meaning a likely crash
Run Code Online (Sandbox Code Playgroud)
您的计时器可能已经被删除(或者可能根本没有创建?)但是变量未设置为nil.
我刚刚遇到了类似的问题,所以这是另一个可能导致检查的例子,例如你的失败.
就我而言,我从这样的字典中获取值:
NSString *text = [dict objectForKey:@"text"];
Run Code Online (Sandbox Code Playgroud)
后来,我正在使用这样的变量:
if (text) {
// do something with "text"
}
Run Code Online (Sandbox Code Playgroud)
这导致EXC_BAD_ACCESS
错误和程序崩溃.
问题是我的字典NSNull
在对象具有空值(它已经从JSON反序列化)的情况下使用值,因为NSDictionary
不能保存nil值.我最终解决了这个问题:
NSString *text = [dict objectForKey:@"text"];
if ([[NSNull null] isEqual:text]) {
text = nil;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8730 次 |
最近记录: |