#pragma mark -  Day04_01_匿名对象

1. 如果函数有返回值 我们可以不使用变量接收返回值.

而是直接将函数写在要使用其返回值的地方.

2. 正常情况下.我创建对象. 是使用了1个指针保存了对象的地址.

new 实际上是1个类方法.

这个类方法的作用

-> 创建对象

-> 初始化对象

返回值是: 创建的这个对象的地址.

MKPerson *p1 = [MKPerson new];

我们认为,这个对象的名字就叫做p1

p1指针指向了这个对象.

3. 匿名对象

1) 没有名字的对象. 我们创建1个对象,不用指针去存储这个对象的地址.

[MKPerson new];

调用new方法去创建对象.但是没有使用指针来接收这个方法的返回值.

所以,创建的这个对象就没有指针指向,这个对象就没有名字.

这个对象就叫做匿名对象.

4. 如何使用匿名对象.

1). [MKPerson new]->_name = @"jack";

[MKPerson new] 这是1个方法. 这个方法的返回值就是这个对象的地址.

2). 调用匿名对象的方法.

[[MKPerson new] sayHi];

5. 匿名对象的特点:

因为匿名对象没有名字.所以这个对象只能使用1次. 创建出来的时候就使用.

[MKPerson new]->_name = @"jack";

[MKPerson new]->_name = @"jack";

这是两个不同的独立的对象.

6. 匿名对象有什么用?

1). 如果1个对象的成员你只需要使用1次.那么这个时候就可以使用匿名对象,但是如果这个对象你后面还想要使用.就不能使用匿名对象了.

2). 如果1个方法的参数是1个对象.而传递给这个参数的对象天生就是来传递给这个方法的.传递完毕之后.不会再使用了.那么这个时候就可以传递1个匿名对象.

#pragma mark - Day04_02_面向对象的三大特征

1)封装:

现实生活中的封装: 将很多的小东西 塞在1个大口袋里面.

好处:

a. 对外部屏蔽.

b. 方便管理.

代码的封装:

函数/方法 就是1种封装的体现: 将一段代码塞在函数/方法中.

好处: 屏蔽了内部的实现. 便于管理.

类是一种更高级别的封装:

1个类中封装数据的状态和行为.

将数据的状态和行为封装在了1个类中. 类中有很多复杂的实现. 对于外部而言无需关心.

2)继承:

3)多态:

#pragma mark - Day04_03_使用setter方法来对属性赋值做逻辑验证

原因

为对象的属性赋值的时候,语法上只要赋值1个和属性的类型相同的数据都是可以的

但是情理上.你不能为对象的属性随意赋值.

封装

1). 要解决什么问题: 要求为对象的属性赋值的时候,赋值的数据要有限制.要经过我们的逻辑判断.

2). 靠谱的解决方案:

1. 先把类的属性的@public修饰符去掉.

2. 为类提供1个方法.这个方法的作用 专门用来为对象的属性赋值. setter

3)setter方法特点

a.  这个方法一定是1个对象方法.

b.  这个方法肯定没有返回值.因为这个方法做的事情就是为属性赋值.

c.  这个方法的名字必须以set开头.再跟上这个属性的名字,去掉下环线,首字母大写.

d.  这个方法一定有参数,参数的类型和属性的类型一致,参数名和属性名一致.只是去掉下划线.

e.  在方法的实现中,判断参数的值是否符合逻辑.如果符合就将其赋值给属性,否则做默认处理.

f.  外界如果想要为对象的属性赋值,是不能直接访问属性了,外界只能调用这个setter方法来为对象的属性赋值,而这个时候,setter方法对准备赋值的数据做了逻辑判断,如果符合逻辑就会赋值给对象的属性.否则就不会.

#pragma mark - Day04_04_getter方法取到对象的属性的值

1) 当我们吧@public去掉之后,想要取出对象的属性的值,也取不出来.因为属性根本就没有权限访问了,所以需要为类再提供1个方法. 这个方法专门用来返回对象的属性的值,这个方法我们叫做 getter

2)getter方法特点

a.  这个方法一定是1个对象方法,因为方法要访问当前对象的属性的值 并返回

b.  这个方法必须有返回值.返回值的类型肯定是和属性的类型一致.

c.  这个方法的名字 就是 这个属性的名字,去掉下划线.

d.  这个方法一定是没有参数的.

e.  这个方法的实现,很简单, 就是直接返回当前对象的属性的值.

f.  这个时候,外界如果想要得到对象的属性的值,就只能必须调用对象的getter方法来拿到了.

"练习

创建一个类 人类

属性 姓名 年龄 性别 存款

提供这4个属性的getter 和 setter

并且获取对象的存款属性时 当存款大于100W 返回时存款的0.1倍

并提供两个类方法

快速创建方法 和 快速创建方法并设置属性的方法

#pragma mark - Day04_05_属性封装的规范

1. 只读与只写封装.

1).  如果属性的封装只有getter 没有setter

那么这样的封装我们就叫做只读封装.

就只能调用getter方法取值.不能调用setter方法赋值. 因为没有setter方法.

2).  只写封装.

属性的封装只有setter 没有getter

那么这样的封装我们就叫做只写封装.

就只能调用setter方法赋值.不能调用getter方法取值.因为美哦有getter方法

2. 属性封装的规范.

只要属性需要被外界访问.无论取值或者赋值的时候,是否有逻辑验证.

都要为其封装getter和setter.

#pragma mark - Day04_06_类与类之间的关系

1. 组合关系.

1个对象是由多个对象组合起来的.

比如.计算机对象. 是由主板对象、CPU对象、内存对象、硬盘对象...组合起来的.

主板、内存、硬盘作为计算机对象的属性.

那么这个时候,计算机对象和主板、内存、硬盘的关系为 组合关系.

2. 依赖关系

1个对象的方法的参数是另外1个对象.那么我们就说他们的关系是依赖关系.

耦合度:  当修改1个对象的时候 对另外1个对象的影响程度.

A类和B类. 如果修改了B类. 发现A类就无法使用了,我们就说他们的耦合度很高.

低耦合: 当修改1个对象的时候 对另外1个对象的影响较小甚至没有影响.

高内聚: 1个对象仅仅做自己相关的事情. 跟自己无关的事情就不要写在类中.

单一职责原则. 1个类只做自己的事情.别人的事情给别人做.

3. 关联关系

关联体现的是两个类之间语义级别的一种强依赖关系,

比如我和我的朋友,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性 的,

而且双方的关系一般是平等的。关联可以是单向、双向的。

表现在代码层面,

为被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类 型为被关联类B的全局变量。

#pragma mark -  Day04_07_士兵突击

1. 士兵突击:

使用面向对象模拟: 士兵开枪,枪射出子弹.

找类:

士兵类:

属性:姓名 兵种

OC基础-day04的更多相关文章

  1. 【OC基础语法考试】

    OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...

  2. iOS 阶段学习第11天笔记(OC基础知识)

    iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import  用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...

  3. OC基础笔记目录

    OC基础(1) Objective-C简介 OC和C对比 第一个OC程序 面向对象思想 OC基础(2) 类与对象 类的设计 第一个OC类 对象方法的声明和实现 类方法的声明和实现 OC基础(3) 对象 ...

  4. OC基础 文件管理

    OC基础  文件管理 1.文件管理类NSFileManager对象的创建: NSFileManager *fm = [NSFileManager defaultManager]; 2.文件操作: (1 ...

  5. OC基础 NSDate

    OC基础  NSDate #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @auto ...

  6. OC基础 NSData

    OC基础 NSData 1.NSString转NSData //NSString转NSData NSString *string = @"abcd12345"; NSData *d ...

  7. OC基础 代理和协议

    OC基础 代理和协议 1.协议 (1)oc语言中得协议:一组方法列表,不需要我们自己实现,由遵守协议的类来实现协议所定制的方法. (2)协议的使用步骤:制定协议-->遵守协议-->实现协议 ...

  8. OC基础 内存管理

    OC基础  内存管理 我们所了解的c语言内存管理,如下: (1)c语言的内存分配:char *p = (char*)malloc(100*sizeof(char)); (2)c语言的内存释放:free ...

  9. OC基础 类的三大特性

    OC基础  类的三大特性 OC的类和JAVA一样,都有三大特性:继承,封装,多态,那么我们就来看一下OC中类的三大特性. 1.继承 继承的特点: (1)子类从父类继承了属性和方法. (2)子类独有的属 ...

随机推荐

  1. C#/PHP Compatible Encryption (AES256) ZZ

    Finding a way to encrypt messages in C# and decrypting them in PHP or vice versa seems to be a " ...

  2. 多用pip,少用easy_install。

    在此之前装python包,用过easy_install,也用过pip,但都是照猫画虎,在网上找命令完了装上就完事.现在稍微整理一下. easy_install: python开发有一个工具,setup ...

  3. NodeAsp——像开发NodeJS应用一样玩转ASP

    NodeAsp是一套Classic ASP框架,借鉴了NodeJS的模块化思想,让您可以使用全新的理念愉快地书写ASP程序. NodeAsp使用遵循CommonJS规范的require,完全兼容Nod ...

  4. 《锋利的Jquery第二版》读书笔记 第三章

    DOM操作的分类 1.DOM Core不专属JavaScript,任何一种支持DOM的程序设计语言都可以使用它,也可以处理XML等标记语言编写出来的文档,getElementById().setAtt ...

  5. 17 Great Machine Learning Libraries

    17 Great Machine Learning Libraries 08 October 2013 After wonderful feedback on my previous post on ...

  6. Centos6.4 xen编译部署

    ruiy亲测成功,现将步骤总结如下,一步步往下将可 原文链接 http://blog.csdn.net/liyakun1992421/article/details/9071061 xen 与 kvm ...

  7. 【转】shell 教程——04 什么时候使用Shell

    因为Shell似乎是各UNIX系统之间通用的功能,并且经过了POSIX的标准化.因此,Shell脚本只要“用心写”一次,即可应用到很多系统上.因此,之所以要使用Shell脚本是基于: 简单性:Shel ...

  8. hdoj 1035 Robot Motion

    Robot Motion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  9. Lab-Data-Systems-for-Biomanufacturing 生物制药企业实验室数据系统(Starlims)

  10. hdu 4634 Swipe Bo 搜索

    典型的bfs模拟 (广度优先搜索) ,不过有好多细节要注意,比如图中如果是  R#  走到这个R的话就无限往右走了,这样就挂了~肯定到不了出口.还有一种容易造成死循环的,比如 #E## DLLL D. ...