Я понимаю, что в Objective C 'переменные экземпляра всегда инициализируются в 0 (или nil, NULL или false, в зависимости от точного типа данных)'. stackoverflow вопрос
В модульном тесте 2 ниже, почему переменная экземпляра _willBeRipeBy
в оранжевом экземпляре Fruit
не установлена на nil
? Это терпит неудачу в STAssertNil([orange willBeRipeBy],nil)
.
test2
проходит, если я создаю метод init
для явного задания _willBeRipeBy
равным nil или если я переименую test1
в test3 для изменения порядка выполнения.
Создание apple
в test1
, похоже, влияет на память, которую orange
использует, но почему Fruits init
не сбрасывает переменную экземпляра в nil.
Я новичок в цели 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