476
魔獸
IOS基礎 第一課
由於本周周四就已經完成了公司分配的任務,今天周五就沒有什麼事幹了,於是突然想
把一些IOS學習的經驗分享給所有後來者。高手勿擾!!!!!
另外,如果在學習過程中遇到什麼問題,可以加我QQ:632840804交流,有問必答!!!!
如果轉載,請注明出處!!!!!

下麵不截圖了,截圖比較麻煩!
下麵隻是對沒有使用過XCODE的用戶有用!!!
1、打開XCODE、新建工程,如上圖,選擇Command Line Tool
2、Product Name: 工程的名稱,這裏就叫FirstCourse
Organization Name: 隨便起一個名
Company Identifier: 隨便起一個你喜歡的名稱
Type: 選擇Foundation
3、Command + R 運行。打印出了Hello World
這一講包括OC getter/setter語法、初始化方法
本人教程都是在代碼中通過注釋來說明,如有不懂,通過QQ聯係我!
代碼風格為本人平時的代碼風格,大家不用跟著這麼寫法!!!!
新建一個HYBDog類(HYB)是前綴
#import <Foundation/Foundation.h> /*! * @brief 狗類 */ @interface HYBDog : NSObject { @private NSString *_name; // 狗的名字 NSString *_dogID; // 狗的唯一身份標識 } // setter/getter方法 - (void)setName:(NSString *)aName; - (NSString *)name; - (void)setDogID:(NSString *)aDogID; - (NSString *)dogID; /*! * @brief 初始化方法都是以initXXXX開頭的方法,以減號(-)開頭的,叫實例方法(對象方法) * 這個方法是配合alloc使用的,如 HYBDog *dog = [[HYBDog alloc] init]; */ - (id)init; /*! * @brief 初始化方法都是以initXXXX開頭的方法,以減號(-)開頭的,叫實例方法(對象方法) * 這個方法是配合alloc使用的,如 HYBDog *dog = [[HYBDog alloc] init]; * 這個方法帶了兩個參數,參數一是aName,參數二是aDogID。這個方法的名稱有些看著不習慣吧? * 對於由其它平台剛轉入這個平台的開發者而言,挺奇特的。其實這種方式很好用,見名知意。 * 這個方法名稱是由幾個標識符組成的:-initWithName:dogID:,這也是官方的寫法吧! * 冒號(:)後麵跟著一個參數類型和參數名 * @param aName 狗的名字 * @param aDogID 狗的唯一身份標識 * @return 返回初始化後的對象 */ - (id)initWithName:(NSString *)aName dogID:(NSString *)aDogID; /*! * @brief 這個方法是以+號開頭的,叫類方法(靜態方法)。這個方法是屬於類所有,在內存中隻有一份。 * 類方法(工廠模式中,叫工廠方法)一般是以類名(不包括前綴)開頭來命名,如dogWithXXX * 這種很直觀,就是創建一隻狗,這隻狗是不需要外部人員釋放的,而是交由自動釋放池來管理。 * 關於自動釋放池,可以參考別人的博客講解。(後麵會講到!!) * @param aName 狗的名字 * @param aDogID 狗的唯一身份標識 * @return 返回初始化後的對象 */ + (id)dogWithName:(NSString *)aName dogID:(NSString *)aDogID; @end
下麵是實現文件:
// // HYBDog.m // FirstCourse // // Created by Linjiasong_Mac on 14-3-28. // Copyright (c) 2014年 Linjiasong_Mac. All rights reserved. // #import "HYBDog.h" @implementation HYBDog // setter/getter方法 - (void)setName:(NSString *)aName { if (_name != aName) { [_name release]; _name = [aName copy]; } return; } - (NSString *)name { return _name; } // 這個方法官方叫Setter方法 - (void)setDogID:(NSString *)aDogID { // 第一步:先判斷_dogID != aDogID,對於同一個對象,沒有必要重新賦值 // 第二步:先釋放之前的對象[_dogID release],這並不表示真正釋放了這個對象所占用的內存, // 隻有當沒有其它對象對這個對象引用的時候才會真正釋放掉內存,否則隻是對該對象的引用計數減一而已 // 第三步:_dogID = [aDogID copy]這個語句其實已經包含兩步了,先對新對象拷貝一份,再把新拷貝到的賦值給_dogID if (_dogID != aDogID) { [_dogID release]; _dogID = [aDogID copy]; } return; } // 這個方法官方叫法是getter方法 - (NSString *)dogID { return _dogID; } /*! * @brief 初始化方法都是以initXXXX開頭的方法,以減號(-)開頭的,叫實例方法(對象方法) * 這個方法是配合alloc使用的,如 HYBDog *dog = [[HYBDog alloc] init]; */ - (id)init { // 注意到這裏的了,self = [super init] // 為什麼要這麼寫法呢?網上也有很多資料解說的,其實我剛接觸的時候也困擾 // 現在我個人理解為:我們繼承於NSObject類,自然也就擁有了NSObject類的屬性 // 先初始化父類,這樣也就初始化了繼承於父類的屬性。如果父類初始化失敗,就會返回nil, // 為什麼非要這麼寫呢?因為父類初始化可能會失敗的,比如,內存不夠用,就有可能分配內存時出錯 // 所以我們通常都這麼寫法,先初始化父類。這種寫法也是官方寫法! // 這裏的super不是一個對象,這隻是一個編譯器標識符。使用這個標識符,可以讓編譯器找到當前類的父類的對象方法 if (self = [super init]) { // 這裏隻是設置默認值 _name = @"小黃"; _dogID = @"1001"; } return self; } /*! * @brief 初始化方法都是以initXXXX開頭的方法,以減號(-)開頭的,叫實例方法(對象方法) * 這個方法是配合alloc使用的,如 HYBDog *dog = [[HYBDog alloc] init]; * 這個方法帶了兩個參數,參數一是aName,參數二是aDogID。這個方法的名稱有些看著不習慣吧? * 對於由其它平台剛轉入這個平台的開發者而言,挺奇特的。其實這種方式很好用,見名知意。 * 這個方法名稱是由幾個標識符組成的:-initWithName:dogID:,這也是官方的寫法吧! * 冒號(:)後麵跟著一個參數類型和參數名 * @param aName 狗的名字 * @param aDogID 狗的唯一身份標識 * @return 返回初始化後的對象 */ - (id)initWithName:(NSString *)aName dogID:(NSString *)aDogID { if (self = [super init]) { // 我個人喜歡寫法,能調用的,就不會自己寫 [self setName:aName]; [self setDogID:aDogID]; } return self; } /*! * @brief 這個方法是以+號開頭的,叫類方法(靜態方法)。這個方法是屬於類所有,在內存中隻有一份。 * 類方法(工廠模式中,叫工廠方法)一般是以類名(不包括前綴)開頭來命名,如dogWithXXX * 這種很直觀,就是創建一隻狗,這隻狗是不需要外部人員釋放的,而是交由自動釋放池來管理。 * 關於自動釋放池,可以參考別人的博客講解。(後麵會講到!!) * @param aName 狗的名字 * @param aDogID 狗的唯一身份標識 * @return 返回初始化後的對象 */ + (id)dogWithName:(NSString *)aName dogID:(NSString *)aDogID { // 這樣創建是不是覺得很不習慣?不要緊,慢慢你會習慣的!!! HYBDog *dog = [[HYBDog alloc] initWithName:aName dogID:aDogID]; // 這裏對dog對象發送了autorelease消息,這樣就把dog對象所指向的內存交給了 // 自動釋放池來管理 return [dog autorelease]; } @end
今天沒事幹,寫了這麼一文,有時間會不斷追加新文章!!歡迎關注!
最後更新:2017-04-03 12:55:57