Swifter {Swift Developer}

메뉴

autoreleasepool 사용시 주의해야할 점

Swift언어의 autoreleasepool는 인수로 함수를 받는 것으로 Objective-C언어와 비슷한 구문으로 설명할 수 있습니다. 그러나, 여기에는 함정이 있는데 Objective-C에서 사용하던 형태로 작성하면 문제가 됩니다.

[objc]
@implementation Kim
{
int _counter;
}

– (void)test
{
_counter = 0;
for (int i = 0; i < 10; i++) {
@autoreleasepool {
if (i == 5) {
return;
}
_counter++;
}
}
}

– (void)start
{
[self test];
NSLog(@”%d”, _counter); // 5
}
[/objc]

autoreleasepool에서 특정 조건이 있으면 return함수에서 빠지겠다는 형태를 보여줍니다. Objective-C에서는 5, Swift에서는 9란 결과로 소스코드 구성은 비슷하지만 결과는 다릅니다.

이는 Swift의 autoreleasepool에서 사용한 return은 test함수에서 빠지는 것이 아닌 인수에 전달된 내부함수에서 빠지는 형태라는 것입니다. 즉, break에서 외부 for반복문에서 빠져 나갈 수 없게 됩니다.  Swift는 멤버변수에 접근하기 위해 self.를 붙일 필요가 있다는 것도 큰 차이점인듯 보여집니다.

Facebook Comments

카테고리:   Swift Books

댓글

죄송하지만 댓글은 닫혀 있습니다.