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

时间:2015-02-20 21:16:40

标签: 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)上失败了。我在执行赋值的代码中放了一些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;

所以我不明白。在这种情况下,为什么参考文献会有所不同?

0 个答案:

没有答案