我有一个单元测试,确保分配给CLLocationManager的对象是特定对象:
CLLocationManager *loc = weakColl.lm;
XCTAssertTrue(
loc.delegate == (id)weakColl,
@"The collection should be the location manager delegate"
);
然而,这项测试在某些设备(CDMA iPhone 6 / iOS 8)上失败了。我在执行赋值的代码中放了一些NSLog()
个调用来试图弄清楚发生了什么:
id lm = [CLLocationManager new];
[lm setDelegate:(id)self];
NSLog(@"SELF: %p", self);
NSLog(@"Delegate: %p", [lm delegate]);
大多数平台上的地址都相同,但在发生故障的设备上,它不是:
SELF: 0x15647af0
Delegate: 0x155589a0
到底是什么?我查看了头文件;它应该是assign
属性:
@property(assign, nonatomic) id<CLLocationManagerDelegate> delegate;
所以我不明白。在这种情况下,为什么参考文献会有所不同?