我知道Objective C中的实例变量总是被初始化为0(或者nil,NULL或false,这取决于确切的数据类型)''。 stackoverflow question为什么实例变量(显然)没有被init设置为nil?
在下面的单元测试2,为什么在Fruit
橙色实例未设置为nil
实例变量_willBeRipeBy
?它在STAssertNil([orange willBeRipeBy],nil)
失败。
test2
通行证,如果我创建init
方法explicitatly设置_willBeRipeBy
为nil或者如果我重命名test1
到TEST3改变执行顺序。
创建apple
在test1
似乎影响了内存orange
用途,但为什么水果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
不要用'get'前缀方法,顺便说一句。只要将它称为'willBeRipeBy'或'ripeDate'或'willBeRipeDate'。 – bbum 2012-03-19 16:24:32