Ios 为什么-CLLocationManager.delegate的赋值有时会复制其值?

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的对象是一个特定的对象:

    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属性的定义。关键是要确保分配了正确的对象,而不是等价物。啊,抱歉,误读了问题