Swift에서는 왜 NSLog이외에 println이 추가되었을까?

기본적으로 println을 사용해야 하는 분위기라고 생각하지만, 실제로 사용하면 효과가 있을지 의문이 생겨서 테스트해보았습니다.

첫번째 제네릭으로 정의되어 있어 문자열이외에는 신경쓰지 않아도 된다는게 좋습니다.

[swift]

func println<T>(object: T)

[/swift]

[swift]

FOUNDATION_EXPORT void NSLog(NSString *format, …) NS_FORMAT_FUNCTION(1,2);

[swift]

이제 느린것으로 유명했던 NSLog이었지만, 이를 해결해본다는 생각으로 테스트해보았습니다. (이 테스트 결과는 Xcode6 베타6로 처리한 결과입니다)

10000번 루프 실행

[swift]

let now = NSDate().timeIntervalSince1970
for i in 0…10000 {
println(“mj”) // NSLog(“mj”)에서도 시도
}
let elapsed = NSDate().timeIntervalSince1970 – now
println(“elapsed: (elapsed)”)

[/swift]

시뮬레이터에서 테스트했으면 아래와 같이 결과는 10배정도 빨랐습니다.

  • println : 0.2초 전후
  • NSLog: 2.3초 전후

혹시나 해서 Objective-C에서도 사용할 수 있도록 구현한 것입니다.

[objc]

@objc
class Util {
class func NSLog(message: String) { // 제네릭 사용하면 Objective-C에서 보이지 않음
println(message)
}
}

[/objc

[objc]

+(void)loopPrint {
NSTimeInterval now = [NSDate date].timeIntervalSince1970;
for (NSUInteger i = 0; i < 10000; i++) {
[Util NSLog:@”mj”];
}
NSTimeInterval elapsed = [NSDate date].timeIntervalSince1970 – now;
[Util NSLog:[NSString stringWithFormat:@”elapsed: %f”, elapsed]];
}

[/objc]

Objective-C에서 Swift코드를 추가해서 실행해도 10배 빠른 비슷한 결과가 나왔습니다. 이렇게 테스트해본 후에 알게 된 것은 그냥 빨리처리하고 싶다면 아래와 같이 정의해도 괜찮았습니다.

[objc]

+(void)NSLog2:(NSString*)message {
printf(“%sn”, [message UTF8String]);
}
// 또는
#define NSLog2(message) printf(“%sn”, [(message) UTF8String])

[/objc]

이렇게 구현하면 Objective-C에서 println을 사용하지 않아도 좋은 성능을 보였습니다. 즉 결론적으로는 println이 잘 되어 있다는 것입니다.

Facebook Comments

You may be interested

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

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

MJ Kim - 4월 29, 2017

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

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

[Swift3] UITextview의 keyboard 닫기

MJ Kim - 4월 29, 2017

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

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

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

MJ Kim - 4월 29, 2017

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