84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
做iPhone/iPad需要哪些知识??
洒家只知道要会 Objective-c, 熟悉 iOS SDK 工具是 xcode
基础的 数据结构、算法、多线程、Socket、XML ,这些应该也是要掌握的, 还有些啥?
或者,能不能细化一下Objective-c的重要技术点?谢谢。。
人生最曼妙的风景,竟是内心的淡定与从容!
作为一个半路转学ios开发的开发者,从我两个月的开发经历来看,objective-c一点也不难。我的开发的程序经历了如下的变迁,我也趁机来总结下得失
从xcode新建一个project,然后打开窗口编辑器(Interface Builder,简称IB),拖入一个UILabel组件,写上"Hello World",这样就算完了。
虽然它的名字叫"objective-c",但似乎一点也不同于我以前写过的c语言,里面充满了无数让菜鸟迷惑的潜规则。
#import
#include
@property
(strong, nonatomic)
@interface
@synthesize
这一阶段基本上集中了很多小白的问题,幸运的是这些问题都很容易在网上找到答案,而且如果你有其它的语言基础的话也会很容易理解这些语法。
我在这一阶段写出的代码基本惨不忍睹,所有的代码都放在一个controller里,一个是因为我懒,另一个是因为我还没有掌握objective-c开发世界里的编码风格,所以索性就不要风格了。你的代码里可能充满了IBOutlet或者IBAction。
IBOutlet
IBAction
不过只要你的代码能够工作,那么一切都是值得的。
在cocoa框架里的一大精髓就是delegate,中文翻译为"委托"模式(本人自创直译其为"代理"模式)。虽然这一模式并不是cocoa的独创,但也是它运用的最好的地方之一。delegate模式解决了controller和view之间的交互问题。
delegate
controller
view
在我写代码的时候,往往发现只要seDelegate,就会发生很多很美妙的事情。另外你会发现,ios提过的这些基本组件已经无法满足你对交互的要求了,这时候你可能需要开始扩展它的一些基本组件。
seDelegate
扩展它的基本组件是件很简单的事情,sdk中也预留了很多接口供我们override。一般这时候的你看着以前自己写的丑陋的代码,会忍不住开始重构它,放手去重构吧。
override
其实了解了objective-c世界的一些潜规则以后,除了对它API的掌握,它就基本已经成为一种普通的工具语言了。
objective-c
但要注意的是,xcode 4以后引入了ARC,也就是自动引用计数这个玩意,并且它默认是打开的。可能会给你造成一些困扰。很多初学者会担心交由系统管理内存会造成内存的浪费,其实了解它的原理后,发现它的实现非常简单,其实就是当一个对象的没有人引用时,系统就自动把它release掉。而交给系统来处理也可以避免内存碎片的形成,但如果你需要频繁在一块内存区域读写内存,比如自己实现的消息队列之类的,建议自己通过struct来实现。
release
struct
但是如果你定义这样一个struct
typedef struct _Test { NSString *name; } Test;
编译器会无情的告诉你,在struct里无法引用objective-c的对象,为什么?因为ARC无法控制到struct里的引用计数。但是如果你非要在struct里引用一个对象怎么办,你可以使用void *来保存一个指针
void *
typedef struct _Test { void *namePtr; } Test; // malloc的指针也不会被arc, 注意自己释放 Test test = (Test *)malloc(sizeof(Test)); test.namePtr = (__bridge void *)[NSString stringWithString:@"Hello"];
但有一个问题,在上面的代码中[NSString stringWithString:@"Hello"]这只是个临时变量,虽然它被struct的指针指向了,但是前面说到了,这不会引起ARC的引用计数。
[NSString stringWithString:@"Hello"]
ARC
那么就是说ARC会认为没有人引用这个变量,如果不出意外,这段代码执行玩以后,这片内存会被系统回收。如果你再次调用这个指针指向的内存,只会得到一个EXC_BAD_ACCESS错误。
EXC_BAD_ACCESS
解决方法其实很简单,我们可以强制让ARC计数,比如在当前的@interface里设置一个变量指向这个string,这样它就不会被释放了
@interface TestObj : NSObject { NSString *name; } - (void)initName { name = [NSString stringWithString:@"Hello"]; // 强制引用 Test test = (Test *)malloc(sizeof(Test)); test.namePtr = (__bridge void *)name; }
OK, 说了这么多比较乱,最后还吐槽了下ARC。最后的结论就是上手是很快的,但学好也需要自己钻研。
第一层:objective-c语法 三天即可修炼成功 第二层:民工UI:UIView、UILabel、UIImageView、UITableView、UINavigationController、UITabBarViewController的用法。视资质要一个月到两个月时间修炼。 第三层:各功能API:网络请求、持久化、通讯录、GPS、邮件API、各种API。半年 第四层:UI进阶:旋转屏幕、核心动画、自定义描绘视图、绘图上下文等。半年 第五层:高级技能:运行时、cocos、OpenGLES等。目前尚未修炼完成,尚不知所需日期。
建议1,不系统学习 建议2,从写Hello World开始,一个一个app的写,用到什么学什么 建议3,市面上没有一本书是靠谱的 建议4,看官方文档和sample code
一张图告诉你!请阅读文章:http://www.henishuo.com/ios-study-route/
作为一个半路转学ios开发的开发者,从我两个月的开发经历来看,objective-c一点也不难。我的开发的程序经历了如下的变迁,我也趁机来总结下得失
最弱智的hello world
从xcode新建一个project,然后打开窗口编辑器(Interface Builder,简称IB),拖入一个UILabel组件,写上"Hello World",这样就算完了。
了解代码的组成
虽然它的名字叫"objective-c",但似乎一点也不同于我以前写过的c语言,里面充满了无数让菜鸟迷惑的潜规则。
#import
而不用#include
?@property
是什么东西?它括号里面的(strong, nonatomic)
又会发生什么奇怪的化学反应?为什么我在@interface
里声明了属性,还要再@property
?它和@synthesize
又有什么关系?这一阶段基本上集中了很多小白的问题,幸运的是这些问题都很容易在网上找到答案,而且如果你有其它的语言基础的话也会很容易理解这些语法。
我在这一阶段写出的代码基本惨不忍睹,所有的代码都放在一个controller里,一个是因为我懒,另一个是因为我还没有掌握objective-c开发世界里的编码风格,所以索性就不要风格了。你的代码里可能充满了
IBOutlet
或者IBAction
。不过只要你的代码能够工作,那么一切都是值得的。
初窥精髓
在cocoa框架里的一大精髓就是
delegate
,中文翻译为"委托"模式(本人自创直译其为"代理"模式)。虽然这一模式并不是cocoa的独创,但也是它运用的最好的地方之一。delegate
模式解决了controller
和view
之间的交互问题。在我写代码的时候,往往发现只要
seDelegate
,就会发生很多很美妙的事情。另外你会发现,ios提过的这些基本组件已经无法满足你对交互的要求了,这时候你可能需要开始扩展它的一些基本组件。扩展它的基本组件是件很简单的事情,sdk中也预留了很多接口供我们
override
。一般这时候的你看着以前自己写的丑陋的代码,会忍不住开始重构它,放手去重构吧。得心应手
其实了解了
objective-c
世界的一些潜规则以后,除了对它API的掌握,它就基本已经成为一种普通的工具语言了。但要注意的是,xcode 4以后引入了ARC,也就是自动引用计数这个玩意,并且它默认是打开的。可能会给你造成一些困扰。很多初学者会担心交由系统管理内存会造成内存的浪费,其实了解它的原理后,发现它的实现非常简单,其实就是当一个对象的没有人引用时,系统就自动把它
release
掉。而交给系统来处理也可以避免内存碎片的形成,但如果你需要频繁在一块内存区域读写内存,比如自己实现的消息队列之类的,建议自己通过struct
来实现。但是如果你定义这样一个struct
编译器会无情的告诉你,在struct里无法引用objective-c的对象,为什么?因为ARC无法控制到struct里的引用计数。但是如果你非要在struct里引用一个对象怎么办,你可以使用
void *
来保存一个指针但有一个问题,在上面的代码中
[NSString stringWithString:@"Hello"]
这只是个临时变量,虽然它被struct的指针指向了,但是前面说到了,这不会引起ARC
的引用计数。那么就是说ARC会认为没有人引用这个变量,如果不出意外,这段代码执行玩以后,这片内存会被系统回收。如果你再次调用这个指针指向的内存,只会得到一个
EXC_BAD_ACCESS
错误。解决方法其实很简单,我们可以强制让ARC计数,比如在当前的
@interface
里设置一个变量指向这个string,这样它就不会被释放了OK, 说了这么多比较乱,最后还吐槽了下ARC。最后的结论就是上手是很快的,但学好也需要自己钻研。
第一层:objective-c语法 三天即可修炼成功
第二层:民工UI:UIView、UILabel、UIImageView、UITableView、UINavigationController、UITabBarViewController的用法。视资质要一个月到两个月时间修炼。
第三层:各功能API:网络请求、持久化、通讯录、GPS、邮件API、各种API。半年
第四层:UI进阶:旋转屏幕、核心动画、自定义描绘视图、绘图上下文等。半年
第五层:高级技能:运行时、cocos、OpenGLES等。目前尚未修炼完成,尚不知所需日期。
建议1,不系统学习
建议2,从写Hello World开始,一个一个app的写,用到什么学什么
建议3,市面上没有一本书是靠谱的
建议4,看官方文档和sample code
一张图告诉你!请阅读文章:http://www.henishuo.com/ios-study-route/