Ios 为什么-CLLocationManager.delegate的赋值有时会复制其值?
我有一个单元测试,确保分配给CLLocationManager的对象是一个特定的对象:Ios 为什么-CLLocationManager.delegate的赋值有时会复制其值?,ios,objective-c,properties,delegates,cllocationmanager,Ios,Objective C,Properties,Delegates,Cllocationmanager,我有一个单元测试,确保分配给CLLocationManager的对象是一个特定的对象: CLLocationManager *loc = weakColl.lm; XCTAssertTrue( loc.delegate == (id)weakColl, @"The collection should be the location manager delegate" ); 然而,该测试在某些设备(CDMA iPhone 6/iOS 8)上
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;
@属性(赋值,非原子)id委托;
所以我不明白。在这种情况下,引用究竟为什么会有所不同?我想说的是,尝试用
弱替换分配,并使用isEqual:
而不是=
@LouisTur。我无法控制CLLocationManager属性的定义。关键是要确保分配了正确的对象,而不是等价物。啊,抱歉,误读了问题