#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. 基础题:HDU 5122 K.Bro Sorting

    Matt's friend K.Bro is an ACMer.Yesterday, K.Bro learnt an algorithm: Bubble sort. Bubble sort will ...

  2. 你需要知道的10位Java开发牛人

    1.James Gosling 1983 年,Gosling 获得了加州大学的计算机科学学士学位.1990 年,他获得了卡内基梅隆大学的计算机科学博士学位,师从 BobSproull.在攻读博士期间, ...

  3. vss搭建于操作

    1.下载的vvs2005,下载后先安装在服务器上,反正就是下一步下一步就对了 安装完成后,打开miscrosoft visual sourcesafe,---create  connection da ...

  4. Bzoj 1227: [SDOI2009]虔诚的墓主人 树状数组,离散化,组合数学

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 895  Solved: 422[Submit][Statu ...

  5. Linux C 编译错误总结

    1. test.c:59:5: warning: incompatible implicit declaration of built-in function ‘memset’ [enabled by ...

  6. 【转】谁说Vim不是IDE?(一)

    谁说Vim不是IDE?(一)   话说操作系统.编程语言和编辑器似乎是程序员永恒的吐槽话题,技术发展了几十年,大家讨论起这几个“之争”还是充满愤怒.津津乐道.有人描述过Emacs和VI程序员,大家沿着 ...

  7. 集中式vs分布式

    Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候 ...

  8. Android Studio 环境配置优化

    一.插件 .ignore: 版本控制忽略文件高亮和补齐ADB Idea: ctrl + Shift + A 查找中添加常用卸载安装app的一些操作,无需命令行Android ButterKnife Z ...

  9. JSP版(utf8编码)的Ueditor百度文章编辑器配置以及使用说明

    二话不说,先上图: 我配置好的效果大致是这些功能:基本的文字编辑功能.图片上传功能.附件上传功能.百度/谷歌地图搜索截图.视/音频发布功能.这个插件是现今我用过觉得最舒服的编辑器,功能齐全强大,稍微修 ...

  10. POJ 1182 (经典食物链 /并查集扩展)

    (參考他人资料) 向量偏移--由"食物链"引发的总结 http://poj.org/problem?id=1182这道食物链题目是并查集的变型.非常久曾经做的一次是水过的,这次 ...