第一步:編程入門課
目前成都創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網站建設、域名、網頁空間、網站托管維護、企業(yè)網站設計、陽泉網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
時間預計:4個星期
推薦看公開課,Udacity也行,網易公開課也行,自己找一個面對對象語言(一般是JAVA, C++, Python)的課。我是在網易公開課看的斯坦福的CS106A,學的JAVA。
如果你純粹學iOS開發(fā),不推薦看哈佛CS50,CS50是給CS系的學生介紹整個計算機世界的框架,講的內容比較多,進度比較快,對iOS開發(fā)其實有點累贅了。(臣妾有點跟不上?。。。?/p>
計劃安排是一天一課,看課程要求的書(至少看完一本)及大部分作業(yè)。這一階段重點不是語法,而是以下3個目標。
目標:
1. 讓自己對編程這件事感到適應。
寫hello world。
怎么寫function, 怎么調用function。
全局變量,局部變量這類基本知識點。
都是基本的東西??纯磿瑢懚鄡蓚€程序就歐啦。
2. 掌握編程語言的基本要素。
編程語言4個要素:
a. 基本的數(shù)據類型:整數(shù),實數(shù),character, string, boolean
b. 基本的運算符號:+-×/++--那啥的
c. 怎樣輸入輸出
d. 怎樣控制程序:sequence,selection,loop
3. 了解編程范式
面對過程編程。
面向對象編程。
第二步:上手iOS!
時間預計:2星期
強烈推薦CS193P,老頭子講的超級好!我的很多東西(對象思維啥的)是在這里跟著做練習的時候才真正明白的(好啦,也可能是上一堂課練習做得少的原因)。如果等到9月應該itunes U上會開始教iOS 7了。網易公開課的是2010年iOS 5版的,前10堂課,也行。(iTunes U上有完整的課)
CS193P說有prerequisite,一開始被嚇到,事實證明還是可以學下去的。頭兩節(jié)課一頭霧水,沒關系,把itunes U上的課件下載下來,把所有代碼打出來,然后一個個元素對應之前學的語言匹配,再不懂先放著,繼續(xù)學后邊的,過幾天打多點代碼就懂了。
感覺學5、6堂課,一個星期左右就可以開始進入下一階段自己做東西了。之后用啥學啥,每堂課都有主題的。速度慢點的同學們,這階段跟我一樣準備兩個星期吧!
第三步:開發(fā)app!
時間預計:2星期(本人...1個半月,實在不好意思說出口)
這個時間就可長可短啦,還包括美工,交互啥的。堅持要用啥學啥的原則,其實就是知道iOS SDK都有什么組件,每個組件有什么function而已。stackoverflow, Github, apple sample code多上,搜索引擎多用。如果有個師傅,這個階段真的是進步神速。
好的!不出意外,你的第一個app就這么新鮮出爐了!從今天開始,成為一個冷艷逼格高尚的iOS開發(fā)者吧!
self和super區(qū)別
self
是關鍵字
代表當前方法的調用者
如果是類方法:代表當前類
如果是對象方法:代表當前類的對象
super
編譯器指令
[self message]和[super message]的實現(xiàn)
其實不管是self還是super真正調用的對象都是一樣的,只是查找方法的位置不一樣,self是從當前類結構中開始查找,super是從父類中查找,但方法真正的接受者都是當前類或者當前類的對象
[self message]:
會轉化為objc_msgSend(id self,SEL _cmd)這個函數(shù),在當前類結構中找到方法并且調用
[super message]
會轉化為id objc_msgSendSuper(struct __rw_objc_super *super, SEL op, …)
,對比[self message]這里除了函數(shù)名加了super以外,第一個參數(shù)由self變成了一個結構體,下面讓我們來解開這個結構體的真面目
struct __rw_objc_super {
struct objc_object *object; //代表當前類的對象
struct objc_object *superClass;
__rw_objc_super(struct objc_object *o, struct objc_object *s) : object(o), superClass(s) {}
};1234512345
這個結構體中有兩個參數(shù):object的對象和一個superClass的結構體指針,這里的object相當于上面的self
在執(zhí)行[super message]時,會做下面的事
1. 編譯器會先構造一個__rw_objc_super的結構體
2. 然后去superClass的方法列表中找方法
3. 找到之后由object調用。
所以當你用[self Class]和[super Class]打印類的時候,打印的都是同一個類,因為他們只是查找方法的位置不同,但是調用方法的類/對象是一樣的.
為什要寫self = [super init]?
因為在Xcode中,你輸入init然后tab就會幫你補全這個方法,以至于我一直都忽略了為什么在[super init]之后還要賦值給self,然后進行判斷,其實這和類簇有關系,我們不能保證init的內存和alloc出來的內存是同一塊內存,像NSString在alloc和init之后的對象分別是NSPlaceholderString和__NSCFConstantString*造成[super init]之后的內存被改變,所以在[super init]之后是nil,因此我們不能保證alloc和init的是同一塊內存,加上這樣的判斷是為了提高容錯性,如果init成功就返回對象,否則返回nil.
iOS的鍵盤協(xié)議。
最常見的就是 UIReturnKeyNext 或者 UIReturnKeyDone。
分別就是右下角那個按鍵變成Next 和Done。
Next就是改變下一個響應者,Done就是完成,虛擬鍵盤收起。
至于中文英文就是看鍵盤啦。。中英文輸入法。
有錯誤請指正,希望可以幫到您。
CGPoint在OC中是一個結構體,結構體一般采用內存對齊的方式分配。
1、結構體每個成員相對于結構體首地址的偏移量都是這個成員大小的整數(shù)倍,如果有需要,編譯器會在成員之間加上填充字節(jié)。
2、結構體的總大小為結構體最寬成員大小的整數(shù)倍。
3、結構體變量的首地址能夠被其最寬基本類型成員的大小所整除。
4、對于結構體成員屬性中包含結構體變量的復合型結構體,在確定最寬基本類型成員時,應當包括復合類型成員的子成員。但在確定復合類型成員的偏移位置時則是將復合類型作為整體看待。
5、總結:結構體的大小等于最后一個成員的偏移量加上其大小再加上末尾的填充字節(jié)數(shù)目,即:sizeof(struct) = offsetof( last item) + sizeof (last item) + sizeof( trailing padding)
例1:
第1個成員相對結構體首地址的偏移量為0,是成員int i(長度為4)的整數(shù)倍。
第2個成員相對結構體首地址的偏移量為4,是成員char c (長度為1)的整倍。(因為結構體總大小為結構體最寬成員大小的整數(shù)位,所以如果此結構體只有這兩個成員的話,會在char c后添加3個填充字節(jié),但現(xiàn)在有3個成員,所以不需要填充。)
第3個成員相對結構體首地址的偏移量為5,不是成員int x 的整數(shù)倍,所以在x前(或者說是c之后)填充3個字節(jié),以使x的偏移量達到8而成為4的整數(shù)倍。所以這個結構體占內存大小為4+1+3+4。
例2:成員個數(shù)與每個成員類型都一個,只不過順序不一樣,占內存大小就不一樣。
例3:復合型結構體
#pragma pack(n) //編譯器將按鈕N個字節(jié)對齊,設置結構體最寬成員大小(與實際最寬成員大小取?。?。即結構體最終長度是n的整數(shù)倍。
#pragma pack() //取消自定義對齊方式。
#pragma pack(puch,1) //把原來對齊方式保存起來,并設置新的對齊方式。
#pragma pack(pop) //恢復之前保存的的對齊狀態(tài)
Expected #pragma pack parameter to be '1', '2', '4', '8', or '16'
預期的#pragma pack參數(shù)為'1','2','4','8'或'16'
demo
設置對齊方式之后的內存計算
1、當設置的對齊長度小于當前成員長度時,成員偏移量是成員長度的整數(shù)倍。
2、當設置的對齊長度大于當前成員長度,并小于最長成員長度時,成員偏移量是設置的對齊長度的整數(shù)倍。
3、當設置的對齊長度大于最長成員長度時,成員成員偏移量按當前成員的實際大小對齊。
4、當設置的對齊長度小于實際最長成員長度時,結構體長度為設置的對齊長度的整數(shù)倍。
5、當設置的對齊長度大于或等于實際最長成員長度時,結構體長度為實際最長成員長度的整數(shù)倍。