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

You may be interested

[Swift3] 폐쇄(Closure)에 대해 살짝 이해할 수 있는 팁
Swift 3.0
shares6 views
Swift 3.0
shares6 views

[Swift3] 폐쇄(Closure)에 대해 살짝 이해할 수 있는 팁

MJ Kim - 4월 29, 2017

몇몇 개발자를 만나 개발을 하다보면, 폐쇄(Closure)에 대해 이해를 하지 못해서 간단하게 바로 이해할 수 있는 팁을 정리해본다. 앱을 개발하다보면 https통신을…

[Swift3] UITextview의 keyboard 닫기
Swift 3.0
shares0 views
Swift 3.0
shares0 views

[Swift3] UITextview의 keyboard 닫기

MJ Kim - 4월 29, 2017

스토리보드에서 델리게이트를 선언하고 class에 UITextViewDelegate를 상속받아서 delegate=self를 viewDidLoad에서 설정하면 간단하게 해결되는데 가끔 헷깔려 하는 경우가 있어 적어본다. [crayon-59043ab061795777991122/] [crayon-59043ab06179a833798283/] [crayon-59043ab06179c503973912/]…

스토리보드에서 다국어 지원 및 Xcode 8.3이상에서 이슈
Swift 3.0
shares3 views
Swift 3.0
shares3 views

스토리보드에서 다국어 지원 및 Xcode 8.3이상에서 이슈

MJ Kim - 4월 29, 2017

다국어 지원은 우선 Localizable.strings파일을 생성한 다음 언어를 지정한다. 그리고 필자가 자주 사용하는 일부 컨트롤들에 대한 확장(extension)을 추가한 다음 스토리보드에서 사용하는…