IOS学习第20天
类的对象与方法
- 匿名对象
1.什么是匿名对象
创建一个对象 而不用一个指针来接受它的地址
2.匿名对象的语法
[Person new];
[Person person];
[Person personWithName:@"张三"];
[Person personWithName:@"张三" andAge:18];
3.匿名对象的在开发过程中什么时候使用
1>特点:匿名对象由于没有指针指向,所以只能访问一次
2>如果一个对象 只需要使用一个次 那么就可以使用匿名对象
```
###封装
* 使用setter方法来对属性赋值做逻辑验证
1.当一个类的属性用@public修饰的时候
在当前类的外部可以用 对象名->_属性 直接访问属性
“这样就不能保证 赋值的时候数据的正确性和合理性
2.解决方案:
1>把@public去掉,为了在类的外部 类的对象不能直接访问成员属性
2>写一个方法,目的是可以操作成员属性
- (void)setAge:(int)age;
1)必须是 "-" 开头
2)返回值必须是void
3)方法名必须是set开头 + 去掉下划线首个字母大写的属性名
4)必须有参数,而且参数的类型必须和要操作的属性类型一致
5)参数名字必须是去掉下划线的属性名
3>在类的外部,通过类的对象 就不能直接操作成员属性,只能通过调用setter方法来访问属性的值
```
- getter方法取到对象的属性的值
1.把@public去掉后,在类的外部 类的对象就不能获取成员属性的值了
2.解决方案:
1>为类在提供一个方法 来获取成员属性的值
- (int)age;
1)必须是一个"-"开头的方法
2)返回值类型必须和要获取的属性的类型一致
3)方法名 必须是 去掉下划线的成员属性
4)必须木有参数
2>在类的外部,通过类的对象调用这个方法即可获取返回值
```
* **属性封装的规范**
1.只读封装
只能通过getter方法获取属性的值
只写getter方法 而不写setter方法
2.只写封装
只能通过setter方法设置属性的值
只写setter方法 而不写getter方法
3.我们刚刚说了半天封装
苹果官方的规范:
就算没有任何数据处理的代码,也要对任何成员属性进行封装
“只要写一个类,类中的所有成员属性,必须要有getter或者setter方法
* static
1.C语言中static修饰局部变量表示把局部变量转换成静态变量,函数执行完毕局部变量不被回收下次接着用
2.C语言中static修饰全局变量表示这个全局变量只能在当前文件中使用
3.C语言中static修饰函数表示这个函数只能在当前文件中使用
4.OC中static不能修饰类的属性也不能修饰方法.
* **self的用法**
1.self是什么?
self是一个指针,保存的地址
2.self怎么用?
1>在对象方法中 self保存的是当前对象的地址
2>在类方法中,self保存是 当前类在代码段中的首地址
3.使用场景
1>self在对象方法中
a.如果对象方法中有和属性同名的局部变量,
这时候要访问当前对象的属性,必须要使用 self->成员变量名”注意:一般局部变量不要以”_”开头
b.如果在对象方法中要调用当前对象的其他方法,那必须用self,
格式:[self 其他方法名];
2>self在类方法中
如果在类方法中需要调用当前类的其他类方法 可以使用self
[self/当前类名 其他类方法名];
如果在类方法中 要创建对象 可以使用self
[self/当前类名 new]
"注意:self不能作为类型来使用
“小知识点
如何找出 一个类在内存中存放的首地址?
1)找一个这个类的对象 调式查看isa指针
2)在这个类的类方法,打印self
3)找一个这个类的对象 调用[对象名 class]方法
4)直接调用这个类的 [类名 class]方法
###继承
**继承是类在继承而不是对象在继承**
**父类对象与子类对象是毫无关系的**
* **什么时候应该用继承**
1.当发现A类中的成员,B类也有,就让B类继承A类
2.继承需要合理:**必须满足is a关系的两个类才能继承**
* OC继承的特点
1.单根性/单继承性,OC中一个类只能有一个父类
2.传递性,类C继承自类B,类B继承自类A,那么类C拥有类A的所有属性方法(即子类拥有父类和父类的父类的所有属性和方法)
“`