Swift là một ngôn ngữ lập trình cho nền tảngtảng IOS. Nó khác với Objective-C khá nhiều: có nhiều cải tiến hết sức mạnh mẽ, nhưng lại có một số hạn chế, chắc chắn Apple đang làm việc cật lực để khác phục. XCode 6.1.1 vẫn còn nhiều bất cập khi biên dịch ứng dụng viết bằng Swift. Ví dụ điển hình là bộ parser ngôn ngữ Swift không ổn định như Objective-C nên thỉnh thoảng SourceKit lại treo, mã Swift không được highlight định dạng đúng màu sắc. Trong một số trường hợp, biên dịch mã Swift rất chậm
Trong bài viết này, tôi chỉ ra một số tip để tối ưu tốc độ khi biên dịch (compile time) và chạy (run time).
Trong Swift, dev có thể khai báo biến không cần định rõ kiểu, trình biên dịch sẽ tự suy diễn ví dụ let name = “Michael Jordan” //Tự chuyển sang kiểu String, quá rõ ràng rồi. Tuy nhiên điều này lại gây cho Swift compiler rất nhiều phiền toái để nhận dạng kiểu dữ liệu phức tạp (Array và Dictionary trộn lẫn nhau) xem nó thuộc về kiểu nào. Đoạn code dưới đây khiến XCode mất vài chục giây để xử lý. Biến simpleIO tự suy diễn kiểu
funcbadDeclare(){
var simpleIO = [SECTION: "Simple IO",MENU:[
[TITLE: "Read from plist",CLASS: "ReadPlist"],
[TITLE: "Write to plist",CLASS: "WritePlist"],
[TITLE: "Read/Write NSUserDefaults",CLASS: "ReadWriteNSUserDefaults#Storyboard"],
[TITLE: "NSCoding",CLASS: "NSCodingDemo"],
[TITLE: "Key Value Observer (KVO)",CLASS: "KVODemo"],
[TITLE: "Notification Center",CLASS: "NotificationDemo"]
]
]
}
Đoạn code dưới đây, khai báo kiểu dữ liệu tường minh, giúp XCode compiler chạy nhanh hơn rất nhiều. Biến simpleIO khai báo tường minh là NSDictionary
funcgoodDeclare(){
var simpleIO = [SECTION: "Simple IO",MENU:[
[TITLE: "Read from plist",CLASS: "ReadPlist"],
[TITLE: "Write to plist",CLASS: "WritePlist"],
[TITLE: "Read/Write NSUserDefaults",CLASS: "ReadWriteNSUserDefaults#Storyboard"],
[TITLE: "NSCoding",CLASS: "NSCodingDemo"],
[TITLE: "Key Value Observer (KVO)",CLASS: "KVODemo"],
[TITLE: "Notification Center",CLASS: "NotificationDemo"]
]
] asNSDictionary//Cuong: must explicitly declare as NSDictionary to speed up compiling
}
hoặc khai báo cách này cũng ok
var simpleIO: [String: AnyObject] = [SECTION: "Simple IO",MENU:[
[TITLE: "Read from plist",CLASS: "ReadPlist"],
[TITLE: "Write to plist",CLASS: "WritePlist"],
[TITLE: "Read/Write NSUserDefaults",CLASS: "ReadWriteNSUserDefaults#Storyboard"],
[TITLE: "NSCoding",CLASS: "NSCodingDemo"],
[TITLE: "Key Value Observer (KVO)",CLASS: "KVODemo"],
[TITLE: "Notification Center",CLASS: "NotificationDemo"]
]
]
Sử dụng tính năng nội suy chuỗi, string interpolation, rất giống hàm printf. Viết đẹp gọn, nhưng chạy chậm nhất
Sử dụng NSMutableString.append. Chạy nhanh thứ nhì
funcstringAdd(a: String, b: String, c: String, d: String) -> String{
var result: String = a
result += b
result += c
result += d
return result
}
funcstringAppend(a: String, b: String, c: String, d: String) -> String{
var result = NSMutableString(string: a)
result.appendString(b)
result.appendString(c)
result.appendString(d)
return result asString
}
funcstringInterpolate(a: String, b: String, c: String, d: String) -> String{
return"\(a)\(b)\(c)\(d)"
}
Tự benchmark các hàm chạy đồng bộ trong Swift
Chú ý đoạn code này chỉ do thời gian chạy đoạn code chạy tuần tự trong cùng một thread.
let startTime = NSDate()
NSThread.sleepForTimeInterval(1)
let timeEllapse = -startTime.timeIntervalSinceNow
Bạn muốn học lập trình hãy liên hệ ngay với Mỹ Vân để được nhận ưu đãi từ học viện nhé
Học lập trình tại Đà Nẵng 0935029202Số tài khoản : 56110000942174 BIDV Chi nhánh Đà NẵngHUYNH THI MY VAN
Không có nhận xét nào:
Đăng nhận xét