黑马程序员技术交流社区

标题: 03封装:类的基本定义、使用、注意点、规范,new 的本质... [打印本页]

作者: bjwqcpy@126.com    时间: 2016-10-12 23:41
标题: 03封装:类的基本定义、使用、注意点、规范,new 的本质...

#pragma mark - Day03_01_对象作为方法的返回值

1.OC方法可以有返回值

- (类名 *)方法名;

2.

对象作为方法的返回值本质:把存有堆区对象地址的指针变量作为方法的返回值

对象作为方法的参数本质:把存有堆区对象地址的指针变量作为方法的参数


#pragma mark - Day03_02_类的属性和方法

1.类的属性

    a)这类事物所具有的共同特征

    b)这个类拥有东西


2.类的方法

    a)这类事物所具有的共同行为

    b)这个类具有的功能


#pragma mark - Day03_03_对象作为类的属性(较难)

1.OC对象是可以作为类的成员变量

2.类的成员变量本质上就是一个变量,指向A类的指针变量作为B类的成员变量

3.当我们根据B类创建一个B类对象之后,其中的A类型的成员变量是没有值的,初始值是nil


4.两个类之间的关系

A类 B类,如果在A类有一个B类型的成员变量,说明A拥有B,这是一种 关联 关系,说明A关联B


类之间的关系:组合 继承...


5.


#pragma mark - Day03_04_玩家类的设计

面向对象开发的时候,一个很重的思想,就是去找类,去设计类


0.面相对向开发的基本流程

    a)根据已知的业务流程,分析需要定义哪些类

    b)分析这些类中应该拥有的内容和功能,转化为类的成员变量和方法


1.枚举类型定义的位置

    a)如果只有当前类使用,可以定义在当前类的头文件中

    b)如果多个类都需要使用,需要定义在一个单独的头文件中,然后在需要用到该枚举类型的类中引用即可.

2.如果在类的一个方法中调用当前类的另外一个方法,需要使用self关键字

    a)如果self存在于对象方法中,指代的是调用该方法的对象

    b)如果self存在于类方法中,指代的是调用该方法的类

    c)也就是说,通过谁调用方法,这个方法中的self就指代谁


#pragma mark - Day03_05_机器人类的设计


#pragma mark - Day03_06_猜拳游戏结束

敲3遍

第1遍,参考老师的代码,学习模仿,理解思路

第2遍,以自己写为主,有问题的地方,再去参考老师代码

第3遍,完全自己敲,根据自己的思路来写,不要参考任何资料


量变引起质变的过程


编程最忌讳的:眼高手低

从基础班开始,就养成多敲多练多思考的习惯

就业班的学习方式也是一样一样的.


#pragma mark - Day03_07_如何取到当前对象的属性

1.可以使用当前类的对象,作为当前类中方法的参数

2.可以使用当前类的对象,作为当前类的成员变量


#pragma mark - Day03_08_异常处理(了解)

1.错误:程序代码无法编译通过

2.bug:程序能够运行,但是执行结果和预期不一致

3.异常:程序能够运行,但是在某些特殊的场景下,会崩溃

4.处理异常:@try...@catch...@finally

@try {

    // 可能会出现异常的代码

} @catch(NSException *ex) {

    // 处理异常的代码

} @finally {

    // 无论是否发生异常都会执行的代码

}

5.OC中的异常处理机制,不是非常完善.所以开发中很少用到.在Java或者C#中,异常处理使用的非常频繁.

6.在iOS开发中,一般都是通过逻辑判断,减少异常的发生


7.简单了解即可.


#pragma mark - Day03_09_类方法的基本使用

1.类方法

1.声明

类方法的声明必须要以 + 号开头

2.调用

类方法只能使用类名调用

[类名 类方法名];


2.对象方法

1.声明

对象方法的声明必须要以 - 号开头

2.调用

对象方法只能使用对象名调用

[对象名 对象方法名]


3.类方法的特点

1.节约空间

2.提高效率


4.类方法的局限性

1.在类方法中无法直接访问当前类的成员变量

2.在类方法中无法使用self关键字直接调用当前类的对象方法


5.工具类

1.如果不需要在方法中访问当前类的属性

2.如果不需要再方法中调用当前类的对象方法

可以使用类方法



#pragma mark - Day03_10_使用类方法需要注意的问题

1.类方法之间是不能重名的

2.对象方法之间是不能重名的

3.类方法和对象非是可以重名的,使用类调用的是类方法,使用对象调用的是对象方法


4.虽然在类方法中无法直接访问当前类的成员变量,但是可以创建一个对象,访问该对象的成员变量

5.在类方法中无法使用self关键字直接调用当前类的对象方法,但是可以创建一个对象,调用该对象的对象方法



#pragma mark - Day03_11_类方法的规范

1.在OC中定义一个类的时候,需要定义一个和类名同名的类方法,用来返回一个纯洁的该类的对象

+ (类名 *)类名 {

    // 创建一个该类的对象,并返回

}


2.如果想返回一个指定成员变量值对象,需要在类方法中添加参数

+ (类名 *)类名With成员变量名:(成员变量类型)形参名 {

    // 创建一个该类的对象

    // 根据外界传入的参数,设置该对象的成员变量的值

    // 返回该对象

}


#pragma mark - Day03_12_new其实是1个类方法


1.new本质上来说是一个类方法

2.new的作用:

    1.在堆区开辟空间创建一个对象

    2.给对象进行初始化,(给对象中的成员变量赋初始值\默认值)

3.





#pragma mark - Day03_13_NSString的本质是1个类

1.NSString本质上就是一个数据类型

可以使用以下方式进行创建

NSString *str = [NSString new];

NSString *str1 = [NSString string];


2.简写的方法

NSString *str = @"xxx";


3.打印的时候

    %p, 打印的是对象的地址

    %@, 打印的是对象的内容


4.如果使用以下方式创建NSString类型的对象

NSString *str = [NSString new];

NSString *str1 = [NSString string];

NSString *str2 = @"";

创建出来的是空字符串@"",也就是说字符串的内容是空的

并不代表str = nil;



#pragma mark - Day03_14_NSString的常用方法


// 把一个C语言字符串转换成OC字符串NSString;

// + (nullable instancetype)stringWithUTF8String:(const char *)nullTerminatedCString;


// 根据指定的格式,拼接字符串,生成一个新的字符串

// + (instancetype)stringWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);


// 返回当前NSString对象的长度

// - (NSUInteger)length;


// 根据index索引获得字符串中的指定字符

// 注意点:返回值是unichar类型,需要使用%C占位符进行输出

// - (unichar)characterAtIndex:(NSUInteger)index;


// 比较传入的字符串和当前字符串的大小

// 比较的规则:从字符串开头开始取出字符,当两个字符串的字符不相同时,比较两个字符的ASCII值,ASCII值大的字符串就大

// 返回值类型是一个枚举

// NSOrderedAscending : 升序,当前字符串比传入的字符串小.

// NSOrderedSame: 一样

// NSOrderedDescending : 降序当前字符串比传入的字符串大

// - (NSComparisonResult)compare:(NSString *)string;


// 判断两个字符串的内容是否相同

// - (BOOL)isEqualToString:(NSString *)aString;


NSString *str = @"aaa";

NSString *str1 = @"bbb";


if (str == str1)

判断的是str和str1这两个指针变量中存储的值是否相同,其实就是比较地址是否相同,而不是比较字符串的内容


OC加强阶段,Fondation框架




今日任务:

1.把猜拳游戏掌握熟练

2.字符串练习

    1. 使用三种方式创建一个'值为空'的字符串(!nil)

    2. 使用两种方式创一个值为'xiaoming'的字符串

    3. 打印 @"123456778900987654321"的长度

    4. 把这三个字符串(@"123"  @"cvb"  @"你好,世界!")拼接到一起,并打印

    5. 比较 @"abc"  和 @"abd" 的大小

    6. 判断 @"abcdefg" 和 @"abCdefg" 存的值是否相等

    7. 获取 @"我英文不好a" 第5个字符的值


3.设计题

1) 设计类


狗类

属性: 名字,年龄

对象方法:

叫几声

类方法:

1.快速创建类方法

2.快速创建类,并设置属性方法.


车类

属性: 品牌,公里数

对象方法:

给车一个速度,车开动,并且公里数增加

类方法:

1.快速创建类方法

2.快速创建类,并设置属性方法.


人类

属性: 姓名,年龄,狗,父亲

对象方法:

1.给他一辆车,让车跑

2.遛狗

类方法:

1.快速创建类方法

2.快速创建类,并设置属性方法(除去'父亲').

3.给他两个人对象(儿子,父亲),判断这两个人对象是不是父子关系


需求:

1. 用普通方式创建一条狗对象(d1),并设置d1的属性

2. 用普通方式创建一个人的对象(p1),并且设置属性,把d1赋值给p1的狗属性,然后遛狗

3. 用类方法创建一个车对象(car),然后让p1开车

4. 用类方法创建一个人对象(p2),并把p2赋值给p1的父亲

5. 用类方法创建一个狗,并设置属性,赋值给p2,然后通过p1打印出这条狗的名字

6. 调用人类的类方法,判断 p2 是不是 p1 的父亲



作者: LXD2016    时间: 2016-10-13 00:11
很好很强大





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2