如何提升iOS開發技能
一、閱讀博客:https://github.com/tangqiaoboy/iOSBlogCN 40多位iOS開發博主的博客地址
二、讀書:每一年閱讀一本高質量的iOS開發書籍
三、看WWDC視頻
四、看蘋果的官方文檔
五、看開源項目的代碼
六、多寫代碼,多思考
七、多和同行進行交流
八、分享ios
一、虛擬機集成
二、真機集成(iOS開發進階P47)git
vim ~/.lldbinit command alias reveal_load_sim expr (void*)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2); command alias reveal_load_dev expr (void*)dlopen([(NSString*)[(NSBundle*)[NSBundle mainBundle] pathForResource:@"libReveal" ofType:@"dylib"] cStringUsingEncoding:0x4], 0x2); command alias reveal_start expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil]; command alias reveal_stop expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStop" object:nil];
國外:Flurry(不會被牆)
國內:友盟github
Crashlytics
Bugly(騰訊)json
App Annievim
CFStringCreateWithCString(kCFAllocatorDefault, 「Hello World」, kCFStringEncodingUTF8)
- __bridge:只作類型轉換,不修改相關對象的引用計數,原來的CF對象在不用時,須要調用CFRelease方法
- __bridge_retained:類型轉換後,將相關對象的引用計數加1,原來的CF對象在不用時,須要調用CFRelease方法
- __bridge_transfer:類型轉換後,將對象的引用計數交給ARC管理,CF對象在不用時,不在須要調用CFRelease方法
dispatch_once
代碼提示dispatch_after
代碼提示dispatch_queue_t urls_queue = dispatch_queue_create(「blog.devzhang.com」, NULL); dispatch_async(urls_queue, ^{ }); dispatch_release(urls_queue);
dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{ // 並行執行的線程一 }); dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{ // 並行執行的線程二 }); dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{ // 彙總結果 });
NSJSONSerialization
比 NSKeyArchiver
更好在選擇持久化方案時,系統提供的
NSJSONSerialization
比NSKeyArchiver
在效率和體積上都更好。
NSJSONSerialization
比NSKeyArchiver
快了7倍,體積小了一半
網上有詳細的測試:https://github.com/randomsequence/NSSerialisationTests安全
block
容易產生循環引用問題
從架構層面來看,若是在使用block
時須要時刻注意避免循環引用問題。那麼還不如不使用block
。用delegate
來實現要安全的多多線程
注意:類方法毫不會產生循環引用!架構
https://blog.csdn.net/denggun12345/article/details/83586790app