OC基础day04
- 匿名对象
- 什么是匿名对象?
- 创建一个对象 而不用一个指针来接收它的地址
- 匿名对象的语法
[Person new];
[Person person];
[Person personWithName:@"张三"];
- 匿名对象在开发中的用处
- 特点: 匿名对象由于没有指针指向 所以只能访问一次
- 如果一个对象 只需要使用一次 那么就可以使用匿名对象
面向对象的三大特征
- 封装
- 继承
- 多态
setter方法对属性赋值做逻辑验证
- 当一个类的属性用 @public 修饰的时候
- 在当前类的外部可以使用 对象名->_属性 直接访问
- 这样不能保证 赋值的数据的正确性和合理性
- 解决方案
- 把@public去掉,为了在类的外部 类的对象不能直接访问成员属性
- 写一个方法 目的是可以操作成员属性
-(void)setAge:(int)age;
- 必须是 “ - ” 开头
- 返回值必须是void
- 方法名必须是set开头 去掉下划线首个字母大写的属性名
- 必须有参数 而且参数的类型必须和要操作的属性类型一致
- 参数名字必须是去掉下划线的属性名
- 在类的外部通过类的对象 就不能直接操作成员属性 只能调用setter方法来访问成员属性
getter方法取到对象的属性的值
- 把@public去掉后 类的外部 类的对象就不能获取成员属性的值了
- 解决方案:
- 为了在提供一个方法 来获取成员属性的值
-(int)age;
- 必须是一个” - “开头的方法
- 返回值类型必须和要获取的实行的类型一致
- 方法名 必须是去掉下划线的成员属性
- 必须没有参数
- 在类的外部 通过类的对象调用这个方法即可获得返回值
- 为了在提供一个方法 来获取成员属性的值
属性的封装规范
- 只读书封装
- 只能通过getter方法获取属性的值
- 直接getter方法 而不懈setter方法
- 只写封装
- 只能通过setter设置属性的值
- 只写setter方法 不写getter
- 就算没有任何数据处理的代码,也要对任何成员属性进行封装
“只要写一个类,类中的所有成员属性,必须要有getter或者setter方法
* 类与类之间的关系*
- 组合关系
- 对象A是有其他若干个对象组合而成的,这些对象是对象A的一个部分
- eg: 人 是由 头 脚 等类组合而成
- 依赖关系
- 类A中有一个方法需要对象B做参数, 此时对象A和对象B就是依赖关系
- 遛狗: 人依赖于狗
- 打电话 人依赖于电话
- 关联关系
- 对象A中有对象B作为属性 但是A不是有B组成的
static关键字
- C语言中 static 修饰局部变量 表示把局部变量装换成静态变量, 函数执行完毕之后函数不会被回收下次接着使用(延长局部变量的寿命, 在程序结束之后会被释放)
- C语言中 static 修饰全局变量表示这个全局变量只能在当前文件中使用
- C语言中 static 修饰函数表示这个函数只能在房钱文件中使用
- OC中 static不能修饰类的属性 也不能修饰方法
self的用法
- 什么是self?
- self是一个指针 保存的地址
- self怎么用?
- 在对象方法中 self保存的是当前对象的地址
- 在类方法中 self保存的是当前类的地址
- 使用场景
- self在对象方法中
- 如果对象方法中有和属性同名的局部变量
- 这时候要访问当前对象的属性,必须要使用 self->成员变量名“注意 一般局部变量不要以”_”开头”
- 如果在对象方法中要调用当前对象的其他方法 那就必须用self,
- 格式 [self 其他方法名];
- 如果对象方法中有和属性同名的局部变量
- self在类方法中
- 如果在类方法中需要调用当前类的其他类方法 可以使用self
- [self/当前类名 其他类方法名];
- 如果在类方法中 要创建对象 可以使用self
-[self/当前类名 new];
- 如果在类方法中需要调用当前类的其他类方法 可以使用self
- self在对象方法中
* 小知识点*
如何找出一个类在内存中存放的首地址
- 找一个这个类的对象 调试查看isa指针
- 在这个类的类方法,打印self
- 找一个这个类的对象 调用[对象名 class]方法
- 直接调用者个类的[类名 class]方法