objective-c - 求教iOS开发知识
黄舟
黄舟 2017-04-17 17:30:24
0
4
409

做iPhone/iPad需要哪些知识??

洒家只知道要会 Objective-c,
熟悉 iOS SDK
工具是 xcode

基础的 数据结构、算法、多线程、Socket、XML ,这些应该也是要掌握的,
还有些啥?

或者,能不能细化一下Objective-c的重要技术点?谢谢。。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(4)
刘奇

身為一個半路轉學ios開發的開發者,從我兩個月的開發經驗來看,objective-c一點也不難。我的開發的程式經歷瞭如下的變遷,我也趁機來總結下得失

最弱智的hello world

從xcode新建一個project,然後開啟視窗編輯器(Interface Builder,簡稱IB),拖曳到一個UILabel元件,寫上"Hello World",這樣就算完了。

了解程式碼的組成

雖然它的名字叫"objective-c",但似乎一點也不同於我以前寫過的c語言,裡面充滿了無數讓菜鳥迷惑的潛規則。

  1. 為什麼用#import而不用#include?
  2. #import而不用#include?
  3. @property是什么东西?它括号里面的(strong, nonatomic)又会发生什么奇怪的化学反应?为什么我在@interface里声明了属性,还要再@property?它和@synthesize又有什么关系?

这一阶段基本上集中了很多小白的问题,幸运的是这些问题都很容易在网上找到答案,而且如果你有其它的语言基础的话也会很容易理解这些语法。

我在这一阶段写出的代码基本惨不忍睹,所有的代码都放在一个controller里,一个是因为我懒,另一个是因为我还没有掌握objective-c开发世界里的编码风格,所以索性就不要风格了。你的代码里可能充满了IBOutlet或者IBAction

不过只要你的代码能够工作,那么一切都是值得的。

初窥精髓

在cocoa框架里的一大精髓就是delegate,中文翻译为"委托"模式(本人自创直译其为"代理"模式)。虽然这一模式并不是cocoa的独创,但也是它运用的最好的地方之一。delegate模式解决了controllerview之间的交互问题。

在我写代码的时候,往往发现只要seDelegate,就会发生很多很美妙的事情。另外你会发现,ios提过的这些基本组件已经无法满足你对交互的要求了,这时候你可能需要开始扩展它的一些基本组件。

扩展它的基本组件是件很简单的事情,sdk中也预留了很多接口供我们override。一般这时候的你看着以前自己写的丑陋的代码,会忍不住开始重构它,放手去重构吧。

得心应手

其实了解了objective-c @property是什麼東西?它括號裡面的(strong, nonatomic)又會發生什麼奇怪的化學反應?為什麼我在@interface裡聲明了屬性,還要再@property?它和@synthesize又有什麼關係?

這一階段基本上集中了很多小白的問題,幸運的是這些問題都很容易在網上找到答案,而且如果你有其它的語言基礎的話也會很容易理解這些語法。 🎜 🎜我在這一階段寫出的程式碼基本上慘不忍睹,所有的程式碼都放在一個controller裡,一個是因為我懶,另一個是因為我還沒有掌握objective-c開發世界裡的編碼風格,所以索性就不要風格了。你的程式碼裡可能充滿了IBOutletIBAction。 🎜 🎜不過只要你的程式碼能夠運作,那麼一切都是值得的。 🎜 🎜初窺精髓🎜 🎜在cocoa框架裡的一大精髓就是delegate,中文翻譯為"委託"模式(本人自創直譯其為"代理"模式)。雖然這模式並不是cocoa的獨創,但也是它運用的最好的地方之一。 delegate模式解決了controllerview之間的互動問題。 🎜 🎜在我寫程式碼的時候,往往發現只要seDelegate,就會發生很多很美妙的事情。另外你會發現,ios提過的這些基本元件已經無法滿足你對互動的要求了,這時候你可能需要開始擴展它的一些基本元件。 🎜 🎜擴充它的基本組件是件很簡單的事情,sdk中也預留了很多介面供我們override。一般這時候的你看著以前自己寫的醜陋的程式碼,會忍不住開始重構它,放手去重構吧。 🎜 🎜得心應手🎜 🎜其實了解了objective-c世界的一些潛規則以後,除了對它API的掌握,它基本上已經成為一種普通的工具語言了。 🎜

但要注意的是,xcode 4以後引入了ARC,也就是自動引用計數這個玩意,並且它預設是打開的。可能會給你造成一些困擾。許多初學者會擔心交由系統管理記憶體會造成記憶體的浪費,其​​實了解它的原理後,發現它的實作非常簡單,其實就是當一個物件的沒有人引用時,系統就自動把它release 掉。而交給系統來處理也可以避免內存碎片的形成,但如果你需要經常在一塊內存區域讀寫內存,比如自己實現的消息隊列之類的,建議自己通過struct來實現。 release掉。而交给系统来处理也可以避免内存碎片的形成,但如果你需要频繁在一块内存区域读写内存,比如自己实现的消息队列之类的,建议自己通过struct来实现。

但是如果你定义这样一个struct

typedef struct _Test {

    NSString *name;

} Test;

编译器会无情的告诉你,在struct里无法引用objective-c的对象,为什么?因为ARC无法控制到struct里的引用计数。但是如果你非要在struct里引用一个对象怎么办,你可以使用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的引用计数。

那么就是说ARC会认为没有人引用这个变量,如果不出意外,这段代码执行玩以后,这片内存会被系统回收。如果你再次调用这个指针指向的内存,只会得到一个EXC_BAD_ACCESS错误。

解决方法其实很简单,我们可以强制让ARC计数,比如在当前的@interface

但是如果你定義這樣一個struct

@interface TestObj : NSObject {
    NSString *name;
}

- (void)initName
{
    name = [NSString stringWithString:@"Hello"];    // 强制引用
    Test test = (Test *)malloc(sizeof(Test));
    test.namePtr = (__bridge void *)name;
}
編譯器會無情的告訴你,struct裡無法引用objective-c的對象,為什麼?因為ARC無法控製到struct裡的引用計數。但是如果你非要在struct裡引用一個物件怎麼辦,你可以使用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等。目前尚未修練完成,尚不知所需日期。

PHPzhong

建議1,不繫統學習
建議2,從寫Hello World開始,一個一個app的寫,用到什麼學什麼
建議3,市面上沒有一本書是可靠的
建議4,看官方文件和sample code

黄舟

一張圖告訴你!請閱讀文章:http://www.henishuo.com/ios-study-route/

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!