Я понимаю, что в 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