将CLBeacon设置为零时EXC_BAD_ACCESS
将CLBeacon设置nil
时,以下内容将会执行崩溃。
CLBeacon *beacon = [[CLBeacon alloc] init]; beacon = nil; // crash
是不是可以释放一个初始化的CLBeacon
?
这可以通过简单地将上面的代码添加到App Delegate的didFinishLaunchingWithOptions
的新项目
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { CLBeacon *beacon = [[CLBeacon alloc] init]; beacon = nil; // crash return YES; }
CLBeacon的苹果文档指出:
你不直接创build这个类的实例。 位置pipe理器对象将遇到的信标报告给其关联的委托对象。
它崩溃的原因是实现细节并不重要,但是这是由于CLBeacon
在您调用init
时没有正确初始化。 当它解除分配时, CLBeacon
解除引用它是_internal
ivar,如果它是NULL
, CLBeacon
崩溃。
你可以通过查看debugging器中的CLBeacon->_internal
ivar的值来看到。 如果使用init
创build信标,则ivar为NULL
,但是如果使用[[CLBeacon alloc] initWithCoder:nil]
创build信标,它将会有一个值,并且在将信标设置为nil
时不会崩溃。