由于本周周四就已经完成了公司分配的任务,今天周五就没有什么事干了,于是突然想
把一些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
今天没事干,写了这么一文,有时间会不断追加新文章!!欢迎关注!