Почему переменная экземпляра (очевидно) не устанавливается в nil при инициализации?

Я понимаю, что в Objective C «переменные экземпляра всегда инициализируются 0 (или nil, NULL или false, в зависимости от точного типа данных)». stackoverflow question

Почему в модульном тесте2 ниже переменная экземпляра _willBeRipeByв оранжевом экземпляре Fruitне установлена ​​в nil? Ошибка STAssertNil([orange willBeRipeBy],nil).

test2проходит успешно, если я создаю метод initдля явной установки _willBeRipeByв nil или если я переименовываю test1в test3, чтобы изменить порядок выполнения .

Создание appleв test1, по-видимому, влияет на память, которую использует Orange, но почему Fruits initне сбрасывает переменную экземпляра до нуля.

Я новичок в задаче C, спасибо.

(с использованием Xcode 4.3, iOS5.0 с включенным автоматическим подсчетом ссылок)

@interface Fruit : NSObject
- (NSDate *)getWillBeRipeBy;
- (void)setWillBeRipeBy:(NSDate *)ripeBy;
@end

@implementation Fruit

NSDate *_willBeRipeBy;

- (NSDate *)getWillBeRipeBy{
    return _willBeRipeBy;
}
- (void)setWillBeRipeBy:(NSDate *)ripeBy{
    _willBeRipeBy = ripeBy;
}
@end

@implementation TestIvarInitialisationTests

- (void)test1
{
    Fruit *apple = [[Fruit alloc] init];
    STAssertNil([apple getWillBeRipeBy],nil);
    NSDate * now = [NSDate date];
    [apple setWillBeRipeBy:now];
    STAssertEqualObjects([apple getWillBeRipeBy], now,nil);
}

- (void)test2
{
    Fruit *orange = [[Fruit alloc] init];
    STAssertNil([orange getWillBeRipeBy],nil);
}
@end

0
задан Community 23 May 2017 в 11:56
поделиться