其实我很反对所谓的xx天学会xx,但是不得已,我还是这么做了……如何在ios学习中对整个知识结构有个把握,这是我想要知道的问题,这里将我的学习经历记录在这里,希望对大家有帮助。另外,cocoa中国官方的学习路线是这样的http://www.cocoachina.com/special/fornew.html
最近接到一个任务,开发一个ipad应用,但是我基本上是零基础,除了稍微看过一点点code以外,于是,如何快速清晰的掌握大量的ios开发知识是势在必行的。
第一,二天,主要是概览一下,不过多的编写代码,主要是看几个sample代码,对下面这些东西大致上有个概念,碰到问题知道哪里去找资料,或者说,碰到问题会有根主线提醒。另外,没有过多的关注关于界面方面的代码,应该在后面补回来。
(补充:经过2天的学习,回过头来发现ios基础非常重要,所以应该一开始就理解透彻,一些内容诸如代理,协议,宏,匿名函数,arc这样的概念,最好是多找几个例子搞清楚,另外有很多书上或者网上查不到的东西,比如xcode环境熟悉,ios程序结构,这些内容看似简单,往往困扰很久,所以sample例子不可少,多看几个sample,有时间多练习几个。最后,一个比较好的学习方式就是类比,用你知道的东西去比喻新的概念。比如,id就很像c#中的var)
以下的内容虽然很多,但是通过归纳总结重点还是可以把内容变少的,另外,以下找到的文章一般我指推荐精品,所以,比较适合收藏。
1. 熟悉xcode。很多人一上来先去看语法,控件,画图等等。实际上,最好的学习方式还是动手做,而动手做的第一步就是先熟悉开发环境(包括快捷键,以便后面事半功倍)。如果开发环境都不熟悉,那么热情一定会消失殆尽的。
xcode教程:http://mobile.51cto.com/iphone-273735.htm,http://mobile.51cto.com/iphone-273738.htm
xcode开发环境上手:http://blog.csdn.net/cutesource/article/details/8488054
2.熟悉object-c语法。
强烈推荐这篇:objective-c语法快速参考,http://www.cocoachina.com/b/?p=122。基本上将oc与c系列语言的差异都讲解得很清楚了。
接下来是几组概念,搞清这些概念至关重要。
2.1协议与委托
http://www.dapps.net/dev/iphone/ios-dev-protocol-and-delegate-example.html
2.2内存相关(因为ARC是建立在MRC的基础上的,所以一定要学下内存管理的内容)
arc:http://onevcat.com/2012/06/arc-hand-by-hand/
如何让mrc在arc下兼容:http://www.cnblogs.com/buro79xxd/archive/2012/03/11/2390761.html
2.3反射,函数指针,selector
强烈推荐这篇以及这个系列:主要讲到很多关键概念,比如SEL,反射,函数指针,IMP等等 http://www.cnblogs.com/yaski/archive/2009/04/05/1429735.html
深入objective-c的动态特性 http://www.onevcat.com/2012/04/objective-c-runtime/
selector:http://mobile.51cto.com/iphone-278572.htm
反射:http://bj007.blog.51cto.com/1701577/521190
function与实例变量的区别: http://stackoverflow.com/questions/8994955/warning-implicit-declaration-of-function-is-invalid-in-c99-please-help
SEL与IMP: http://blog.csdn.net/dufeat/article/details/8839116
关于这部分,我总结一下:
每个方法都有一个唯一标识的id,SEL就是这个id的类型,可以把SEL看做方法名的映射结果(SEL是整形的),请注意,以下是SEL与NSString的互转方式,我的理解是,这是反射获取方法的方式。
1 SEL 变量名 = @selector(方法名字);
2 SEL 变量名 = NSSelectorFromString(方法名字的字符串);
3 NSString *变量名 = NSStringFromSelector(SEL参数);
接下来你自然会问,关于方法的反射有了,那么关于类的呢?下面就是类与NSString的互转方式,这是
反射获取类的方式
1 Class 变量名 = [类或者对象 class];
2 Class 变量名 = [类或者对象 superclass];
3 Class 变量名 = NSClassFromString(方法名字的字符串);
4 NSString *变量名 = NSStringFromClass(Class参数);
那么,有些什么常用的反射调用方法,respondsToSelector是判断该对象是否存在这个方法,performSelector是在该对象上执行这个方法。
(id)[对象 performSelector:SEL变量 withObject:参数1 withObject:参数2];
(BOOL)[对象 respondsToSelector:SEL变量];
+(BOOL) instancesRespondToSelector:selector(判断指定的类实例是否能响应selector所指定的方法)
还有些支持的反射方法:
-(BOOL) isKindOf:class-object(判断对象是否是class-object或其子类的成员)
-(BOOL) isMenberOfClass:class-object(判断对象是否是class-object的成员)
+(BOOL) isSubclassOfClass:class-object(判断对象是否是指定类的子类)
最后是
函数指针的两种定义方法(为啥要函数指针,当你大量传递一个对象但其实只需要它中间的某个方法时你就会发现函数指针的好处了),即SEL转IMP
(IMP)[对象 methodForSelector:SEL变量]
2.4匿名函数
匿名函数(即块):http://www.onevcat.com/2011/11/objective-c%E4%B8%AD%E7%9A%84block/
2.5KVC和KVO
http://www.cocoachina.com/macdev/cocoa/2009/0611/221.html
http://marshal.easymorse.com/tech/objc-%E4%BD%BF%E7%94%A8kvc
http://magicalboy.com/kvc_and_kvo/
3.常用类总结。
普通类:NSString与NSMutable http://www.cocoachina.com/newbie/tutorial/2010/1013/2173.html
NSArray http://www.cocoachina.com/newbie/tutorial/2010/1009/2151.html
集合类:http://www.haogongju.net/art/1537639
第三方类库:http://mobile.51cto.com/hot-249831.htm
4.ios程序的结构,生命周期及核心。
http://blog.csdn.net/dqjyong/article/details/7832063
http://blog.csdn.net/kesalin/article/details/6691766
http://mobile.51cto.com/iphone-222172.htm
5.ios界面相关
ios事件
http://blog.csdn.net/dqjyong/article/details/7832063
自动布局
http://hi.baidu.com/rslhg/item/c51cfdfa03653a18e3e3bd77
http://onevcat.com/2012/09/autoayout/
UIViewController *child = [[self storyboard] instantiateViewControllerWithIdentifier:@"ControllerId"];
从UIView中获得对象所属的UIViewController
- (UIViewController*)viewController {
for (UIView* next = [self superview]; next; next = next.superview) {
UIResponder* nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
return (UIViewController*)nextResponder;
}
}
return nil;
}
切换视图的几种方法
5.比较全的教程(收藏一下,实际上只看了前3篇)。
http://blog.csdn.net/column/details/ios-base.html?page=1
6.常用的代码片段整理。
http://www.cocoachina.com/newbie/tutorial/2012/1220/5377.html
7.从面试问题看ios的学习方向。
http://www.onevcat.com/2013/04/ios-interview/
8.程序调错
http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1
9.另外几个总结得非常好的开发技巧
http://blog.csdn.net/ztp800201/article/details/9119949
http://blog.csdn.net/column/details/objc-studyagain.html
10.绘图动画
http://lfhzxl.blog.51cto.com/5880209/992204
11.ios入门视频教程
http://study.163.com/course/introduction/344014.htm#/courseDetail
12.屌丝必备:vmware9安装mac os
http://diybbs.zol.com.cn/1/34037_699.html