84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
做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 @property是什麼東西?它括號裡面的(strong, nonatomic)又會發生什麼奇怪的化學反應?為什麼我在@interface裡聲明了屬性,還要再@property?它和@synthesize又有什麼關係?
objective-c
但要注意的是,xcode 4以後引入了ARC,也就是自動引用計數這個玩意,並且它預設是打開的。可能會給你造成一些困擾。許多初學者會擔心交由系統管理記憶體會造成記憶體的浪費,其實了解它的原理後,發現它的實作非常簡單,其實就是當一個物件的沒有人引用時,系統就自動把它release 掉。而交給系統來處理也可以避免內存碎片的形成,但如果你需要經常在一塊內存區域讀寫內存,比如自己實現的消息隊列之類的,建議自己通過struct來實現。 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
@interface TestObj : NSObject { NSString *name; } - (void)initName { name = [NSString stringWithString:@"Hello"]; // 强制引用 Test test = (Test *)malloc(sizeof(Test)); test.namePtr = (__bridge void *)name; }
第一層: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
?#import
而不用#include
?@property
是什么东西?它括号里面的(strong, nonatomic)
又会发生什么奇怪的化学反应?为什么我在@interface
里声明了属性,还要再@property
?它和@synthesize
又有什么关系?这一阶段基本上集中了很多小白的问题,幸运的是这些问题都很容易在网上找到答案,而且如果你有其它的语言基础的话也会很容易理解这些语法。
我在这一阶段写出的代码基本惨不忍睹,所有的代码都放在一个controller里,一个是因为我懒,另一个是因为我还没有掌握objective-c开发世界里的编码风格,所以索性就不要风格了。你的代码里可能充满了
IBOutlet
或者IBAction
。不过只要你的代码能够工作,那么一切都是值得的。
初窥精髓
在cocoa框架里的一大精髓就是
delegate
,中文翻译为"委托"模式(本人自创直译其为"代理"模式)。虽然这一模式并不是cocoa的独创,但也是它运用的最好的地方之一。delegate
模式解决了controller
和view
之间的交互问题。在我写代码的时候,往往发现只要
seDelegate
,就会发生很多很美妙的事情。另外你会发现,ios提过的这些基本组件已经无法满足你对交互的要求了,这时候你可能需要开始扩展它的一些基本组件。扩展它的基本组件是件很简单的事情,sdk中也预留了很多接口供我们
override
。一般这时候的你看着以前自己写的丑陋的代码,会忍不住开始重构它,放手去重构吧。得心应手
其实了解了
這一階段基本上集中了很多小白的問題,幸運的是這些問題都很容易在網上找到答案,而且如果你有其它的語言基礎的話也會很容易理解這些語法。 🎜 🎜我在這一階段寫出的程式碼基本上慘不忍睹,所有的程式碼都放在一個controller裡,一個是因為我懶,另一個是因為我還沒有掌握objective-c開發世界裡的編碼風格,所以索性就不要風格了。你的程式碼裡可能充滿了objective-c
@property
是什麼東西?它括號裡面的(strong, nonatomic)
又會發生什麼奇怪的化學反應?為什麼我在@interface
裡聲明了屬性,還要再@property
?它和@synthesize
又有什麼關係?IBOutlet
或IBAction
。 🎜 🎜不過只要你的程式碼能夠運作,那麼一切都是值得的。 🎜 🎜初窺精髓🎜 🎜在cocoa框架裡的一大精髓就是delegate
,中文翻譯為"委託"模式(本人自創直譯其為"代理"模式)。雖然這模式並不是cocoa的獨創,但也是它運用的最好的地方之一。delegate
模式解決了controller
和view
之間的互動問題。 🎜 🎜在我寫程式碼的時候,往往發現只要seDelegate
,就會發生很多很美妙的事情。另外你會發現,ios提過的這些基本元件已經無法滿足你對互動的要求了,這時候你可能需要開始擴展它的一些基本元件。 🎜 🎜擴充它的基本組件是件很簡單的事情,sdk中也預留了很多介面供我們override
。一般這時候的你看著以前自己寫的醜陋的程式碼,會忍不住開始重構它,放手去重構吧。 🎜 🎜得心應手🎜 🎜其實了解了objective-c
世界的一些潛規則以後,除了對它API的掌握,它基本上已經成為一種普通的工具語言了。 🎜但要注意的是,xcode 4以後引入了ARC,也就是自動引用計數這個玩意,並且它預設是打開的。可能會給你造成一些困擾。許多初學者會擔心交由系統管理記憶體會造成記憶體的浪費,其實了解它的原理後,發現它的實作非常簡單,其實就是當一個物件的沒有人引用時,系統就自動把它
release
掉。而交給系統來處理也可以避免內存碎片的形成,但如果你需要經常在一塊內存區域讀寫內存,比如自己實現的消息隊列之類的,建議自己通過struct
來實現。release
掉。而交给系统来处理也可以避免内存碎片的形成,但如果你需要频繁在一块内存区域读写内存,比如自己实现的消息队列之类的,建议自己通过struct
来实现。但是如果你定义这样一个struct
编译器会无情的告诉你,在struct里无法引用objective-c的对象,为什么?因为ARC无法控制到struct里的引用计数。但是如果你非要在struct里引用一个对象怎么办,你可以使用
void *
来保存一个指针但有一个问题,在上面的代码中
[NSString stringWithString:@"Hello"]
这只是个临时变量,虽然它被struct的指针指向了,但是前面说到了,这不会引起ARC
的引用计数。那么就是说ARC会认为没有人引用这个变量,如果不出意外,这段代码执行玩以后,这片内存会被系统回收。如果你再次调用这个指针指向的内存,只会得到一个
EXC_BAD_ACCESS
错误。解决方法其实很简单,我们可以强制让ARC计数,比如在当前的
但是如果你定義這樣一個struct@interface
void *
來保存一個指標🎜 rrreee 🎜但有一個問題,在上面的程式碼中[NSString stringWithString:@"Hello"]
這只是個臨時變量,雖然它被struct的指標指向了,但是前面說到了,這不會引起ARC
的引用計數。 🎜 🎜那麼就是說ARC會認為沒有人引用這個變量,如果不出意外,這段程式碼執行玩以後,這片記憶體會被系統回收。如果你再呼叫這個指標所指向的內存,只會得到一個EXC_BAD_ACCESS
錯誤。 🎜 🎜解決方法其實很簡單,我們可以強制讓ARC計數,例如在目前的@interface
裡設定一個變數指向這個string,這樣它就不會被釋放了🎜 rrreee 🎜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/