类的封装 self语法 继承

来源:互联网 发布:淘宝一口价怎么选择 编辑:程序博客网 时间:2024/05/29 12:32

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的所有属性方法(即子类拥有父类和父类的父类的所有属性和方法)
“`

0 0