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

Xcode 기능 확장(Extension) 제거하기
Xcode
shares3 views
Xcode
shares3 views

Xcode 기능 확장(Extension) 제거하기

MJ Kim - 3월 18, 2017

Mac에서 Xcode Source Editor Extension등의 기능확장을 사용하다보면 디버깅시 시스템 환경 설정의 확장이 앱에 등록되는 경우가 있다. 계속해서 목록이 남아 있기…

iOS App Store Review(앱 심사약관) 번역
Swift 3.0
shares124 views
Swift 3.0
shares124 views

iOS App Store Review(앱 심사약관) 번역

MJ Kim - 3월 15, 2017

App Store Review를 번역했다. 사실 이번에 좀 애매한 리젝을 당해서 그걸 이해하고자 정리해본다. 원문링크: https://developer.apple.com/app-store/review/guidelines/ 1. 이약관은? 1.1 앱 개발자로서 프로그램의…

Raspberry Pi 타이머 On/Off 전원제어모듈 RPi1114-Raspberry Pi
IoT by Raspberry Pi
shares9 views
IoT by Raspberry Pi
shares9 views

Raspberry Pi 타이머 On/Off 전원제어모듈 RPi1114-Raspberry Pi

MJ Kim - 3월 04, 2017

RPi1114-Raspberry Pi전원제어 모듈이 있다. 이 제품은 40Pin GPIO핀헤더에 연결하여 사용하는 모듈로 Cortax-M0마이크로컨트롤러 LPC1114를 내장하고 Raspberry Pi의 시작과 정지 순서등을 프로그래밍할…