객체가 스스로 초기화 되었다??

(void)viewDidLoad 에서 해당 객체를 초기화 하고 사용했는데 다음에 다시 참조하려 하니 해당 객체가 nil 값이 들어있었다.

자세한 코드는 다음과 같다.

@interface FavoriteSimpleNumViewCtrl : UIViewController
{
    NSMutableArray *testArray;
@end

@implementation FadvoriteSimpleNumViewCtrl
- (void)viewDidLoad {
    [super viewDidLoad];
    testArray = [NSMutableArray array];
    for(int i = 1 ; i <= 10 ; i++){
        UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
        [testArray addObject:button];
    }
[self checkArray];
}

- (void)checkArray{
    NSLog(@"%@",testArray);
}

@end

자여기서 viewDidLoadcheckArray를 호출할때는 안이 10objects로 꽉찼지만 view로드가 완료된후 버튼이나 다른 이벤트로 checkArray를 호출할경우 nil객체로 되있었다.

답은 간단하였다. 객체인 testArrayalloc 을 해주지 않았기 때문이다. alloc 을 안할경우 autorelease가 되는데 이는 함수호출이 끝났을경우 자동으로 release를 해준다.

testArray = [NSMutableArray array];

이 줄을

testArray = [[NSMutableArray alloc] initWithObjects:nil];

로 바꿔주면 되겠다.

Posted in Programming Life with : iOS

Written on August 2, 2012