Objective C '의 인스턴스 변수는 항상 0 (또는 정확한 데이터 형식에 따라 nil, NULL 또는 false)로 초기화된다는 것을 알고 있습니다.' 아래 부에서 TEST2 stackoverflow questioninit이 인스턴스 변수를 nil로 설정하지 않은 이유는 무엇입니까?
이유 nil
설정되지 Fruit
의 오렌지 인스턴스의 인스턴스 변수 _willBeRipeBy
인가? STAssertNil([orange willBeRipeBy],nil)
에서 실패합니다.
test2
뚫고 난 explicitatly 전무로 _willBeRipeBy
를 설정하는 방법 init
를 생성하거나 I가 test1
바꾸면 실행 순서를 변경하는 경우 TEST3. test1
에서 apple
이 orange
사용하는 메모리를 초래하는 것 같지만 과일을 init
이유 인스턴스 변수 전무로 재설정하지 생성
.
나는 객관적인 C, 고맙습니다. 구현의 블록 내에서 선언 변수 인스턴스 변수 아니므
@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', btw를 붙이지 마십시오. 'willBeRipeBy' 또는'ripeDate' 또는'willBeRipeDate'라고 부르면됩니다. – bbum