IOS基础 第一课

由于本周周四就已经完成了公司分配的任务,今天周五就没有什么事干了,于是突然想
把一些IOS学习的经验分享给所有后来者。高手勿扰!!!!!
另外,如果在学习过程中遇到什么问题,可以加我QQ:632840804交流,有问必答!!!!

如果转载,请注明出处!!!!!
IOS基础 第一课_第1张图片

下面不截图了,截图比较麻烦!
下面只是对没有使用过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 

/*!
 * @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

今天没事干,写了这么一文,有时间会不断追加新文章!!欢迎关注!


你可能感兴趣的:(IOS每日一课(共同学习))