我知道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