Skip to content

Latest commit

 

History

History
253 lines (209 loc) · 11.7 KB

README.md

File metadata and controls

253 lines (209 loc) · 11.7 KB

icon

##TODO

iOS资深开发者必备基础技能

####icon

  • UI

    • 基础控件:UIButton、UIImageView、UILabel、UIView and so on...
    • 高级控件:UITableview、UICollectionView主要任务是高级控件的性能优化工作
    • 屏幕适配:Autoresizing、AutoLayout、SizeClass、Masonary
    • 多控制器管理:UINavigationController、UITabbarController、自定义控制器管理
    • Quartz2D、核心动画、事件处理、手势、UIDynamic
  • 高级技能

    • UNIX环境高级编程
    • UNIX环境网络编程
    • 基于CoreText的排版引擎定制
    • Xcode插件开发
    • ReactiveCocoa
    • React Native
    • 蓝牙4.0(BLE)+ 运动手环开发+智能家居
    • APP高性能架构:MVC、MVVM、MbMVC
    • iOS编码设计模式的深度理解代理、单例、工厂、观察者等
    • APP架构经验谈
    • XMPP+环信\容联云通讯+即时通讯
    • 人脸识别 (face++)
  • 多线程网络

    • NSThread、NSOperation、GCD、pthread
    • socket、TCP/IP
    • 网络安全、加密算法、https
    • NSURLConnection、NSURLSession、UIWebView、AFNetworking,SDWebImage、kingFisher,MJRefresh、MJExtension
  • HTML5

    • HTML、CSS、JavaScript
    • 响应式布局、BootStrap、JQuery、JQuery-Mobile
    • HTML5+Native混合开发
  • 逻辑和算法

    • 数据结构与算法
    • C/C++,Swift,python,ruby,Objc
    • Runtime,Runloop
  • 实用技术

    • Plist存储、NSCoding、SQLite、CoreData
    • 音频、视频、流媒体、滤镜处理、拍照、相册、讯飞语音
    • 推送、加速计、单元测试、静态库、第三方登录
    • AppExtensions、炫酷动画特效、地图定位
    • 二维码、正则表达式、ipa打包和重签名,iTunesConnect发布
    • 瀑布流、自定义UICollectionViewLayout
    • git、github、Cocoapods、Carthage、svn(建议放弃使用,CornerStone)
    • 社交分享、应用统计、设备信息获取(内存、CPU、磁盘大小等硬件信息)
    • 第三方支付集成、App内购、通讯录等
  • AppleWatch

    • Glance、Notification
    • iPhone App和Watch App通信
  • APP类型

    • 新闻媒体类app
    • 多媒体类app
    • 电商类app
    • SNS类富媒体(对富媒体排版的高要求)app
    • 工具类app
    • 助手类app,包括越狱类

##十个问题

  • 你使用过Objective-C的运行时编程(Runtime Programming)么?如果使用过,你用它做了什么?你还能记得你所使用的相关的头文件或者某些方法的名称吗?
  • 你实现过多线程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些需要在线程中创建或者传递?你是用什么样的策略来实现的?
  • Core开头的系列的内容。是否使用过CoreAnimation和CoreGraphics。UI框架和CA,CG框架的联系是什么?分别用CA和CG做过些什么动画或者图像上的内容。(有需要的话还可以涉及Quartz的一些内容)
  • 是否使用过CoreText或者CoreImage等?如果使用过,请谈谈你使用CoreText或者CoreImage的体验。
  • NSNotification和KVO的区别和用法是什么?什么时候应该使用通知,什么时候应该使用KVO,它们的实现上有什么区别吗?如果用protocol和delegate(或者delegate的Array)来实现类似的功能可能吗?如果可能,会有什么潜在的问题?如果不能,为什么?(虽然protocol和delegate这种东西面试已经面烂了...)
  • 你用过NSOperationQueue么?如果用过或者了解的话,你为什么要使用NSOperationQueue,实现了什么?请描述它和GCD的区别和类似的地方(提示:可以从两者的实现机制和适用范围来描述)。
  • 既然提到GCD,那么问一下在使用GCD以及block时要注意些什么?它们两是一回事儿么?block在ARC中和传统的MRC中的行为和用法有没有什么区别,需要注意些什么?
  • 您是否做过异步的网络处理和通讯方面的工作?如果有,能具体介绍一些实现策略么?
  • 对于Objective-C,你认为它最大的优点和最大的不足是什么?对于不足之处,现在有没有可用的方法绕过这些不足来实现需求。如果可以的话,你有没有考虑或者实践过重新实现OC的一些功能,如果有,具体会如何做?
  • 你实现过一个框架或者库以供别人使用么?如果有,请谈一谈构建框架或者库时候的经验;如果没有,请设想和设计框架的public的API,并指出大概需要如何做、需要注意一些什么方面,来使别人容易地使用你的框架。

##参考资料

##工具

##Notice

####关于白盒测试

  1. 可以具体了解AppleScript TODO

####Xcode使用技巧

  1. Xcode常用的快捷键如下:
    cmd + shift + o 快速查找类,可以快速跳到指定类的源码中
    ctrl + 6 列出当前文件中的所有方法
    cmd + 1 切换成Project Navigator
    cmd + ctrl + up 在.h和.m文件之间切换
    cmd + enter 切换成standard editor
    cmd + opt + enter 切换成 assistant editor
    cmd + shift + y 切换console View的现实或隐藏
    cmd + 0 隐藏左边得导航区
    cmd +opt + 0 隐藏右边的工具区
    cmd + ctrl + Left/Right 到上/下一次编辑的位置
    cmd + opt +j 跳转到文件过滤区
    cmd + shift +F ** 在工程中查找**
    cmd + R 运行
    cmd + b 编译
    cmd +shift + k 清空编译好的文件
    cmd + . 结束本次调试
    ESC 调出代码补全功能
    cmd + t 新建一个tab栏
    cmd + shift + [ 在tab栏之间切换
    cmd + 单击 查看该方法的实现
    opt + 单击 查看该方法的实现

####为工程增加Daily Build

  1. 增加Daily Build的步骤和好处,这里有一篇详细文章
  2. TODO

####管理代码片段

  1. 代码片段管理在Xcode整个界面的右下角,可以通过快捷键 cmd + opt + ctrl + 2 调出
    2.代码片段管理如下图所示 :

icon

  1. 这里是常用的代码片段管理代码片段

####GCD的深入使用 为了方便的使用GCD,苹果提供了一些方法方便我们将block放在主线程或后台线程执,
或者延后执行。主要由如下几种:

  1. 后台执行:
   dispatch_async(dispatch_get_global_queue(0,0),^{  
	//something
}); 
  1. 主线程执行:
 dispatch_async(dispatch_get_main_queue(),^{
	//something  
});  
  1. 一次性执行:
  static dispatch_once_t onceToken;    
  dispatch_once(&onceToken,^{  
  //code to be executed  
});  
  1. 延迟2秒执行:
  double delayInseconds = 2.0f;  
  dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW,delayInseconds * NSEC_PER_SEC);  
  dispatch_after(popTime,dispatch_get_main_queue(),^(void){  
  //code to be executed on the main queue after delay  
})  
  1. dispatch_queue_t也可以自己定义,如果要定义queue,可以使用dispatch_queue_create方法,示例如下:
	dispatch_queue_t urls_queue = dispatch_queue_create("blog.ddapps.tolly",NULL);  
  dispatch_async(urls_queue,^{  
	// your code  
});  
  dispatch_release(urls_queue);
  1. GCD还有一些高级用法,例如让后台两个线程并行执行,然后等两个线程都结束后,再汇 总执行结果。这个可以用dispatch_group 、dispatch_group_async和dispatch_group_notify来实现,示例如下:
	dispatch_group_t group = dispatch_group_create();  
	dispatch_group_async(group,dispatch_get_global_queue(0,0),^{  
	//并行执行的线程一  
});  
	dispatch_group_async(group,dispatch_get_globale_queue(0,0),^{  
        //并行执行的线程二  
});    
	dispatch_group_notify(group,dispatch_get_global_queue(0,0),^{  
	//汇总结果  
})  

####Ipa重新签名

####数据处理

####HighLevel复杂网络处理封装

####UITableView性能优化

####CoreText排版

  1. DTCoreText源码解析1
    DTCoreText步骤原理: 1.解析HTML生成DOM树 2.解析CSS,合并得到每个DOM节点对应的样式 3. 生成NSAttributeString

####相机照片处理相关

  1. AVFoundation 和 GPUImage

####产品

  1. 原型设计工具