閱讀476 返回首頁    go 魔獸


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

  上一篇:go Sql Server 常用命令小結
  下一篇:go Sql Server 常用命令小結