OC中对象

来源:互联网 发布:python 数据分析 知乎 编辑:程序博客网 时间:2024/06/07 03:54

1.Xcode快捷键

command+control+⬆️在.m和.h之间切换

2.匿名对象

[[Person new] say];

2.1:当对象只需要调用一次的时候

3.setter与getter

setter

设置成员变量的值;
写法:
1.setter方法一定是对象方法;
2.一定没有返回值;
3.一定以set开头,并且set后面跟上需要设置的成员变量的名称去掉下划线,并且首字母大写;
4.一定有参数,参数类型一定和需要设置的成员变量的类型一致,并且参数的名称就是成员变量的名称去掉下划线;

getter:

作用:获取成员变量的值;
1.getter方法一定是对象方法
2.一定有返回值,而且返回值一定和获取的成员变量的类型一致
3.方法名称就是获取的成员变量的名称去掉下划线即可
4.一定没有参数;

4.self

.语法一般被用来给成员变量赋值;
self关键字不能离开类,离开类之后没有任何意义;

    总结:如果self在对象方法中,那么self就代表调用当前调用对象方法的那个对象;(即对象方法中有self关键字,谁调用当前这个对象方法self就是谁)如果self在类方法中,那么self就代表调用当前类方法的那个类

self会自动区分类方法,如果在类方法中使用self调用对象方法,会报错;即不能再类中用self调用对象方法;
不能在对象方法或类方法中,调用当前self所在的方法,会造成死循环。

使用场景:
在对象方法之间相互调用;
在类方法之间相互调用;

4.super

作用:
1.直接调用父类的某个方法;
2.super在对象方法中,那么就会调用父类的对象方法;
super在类方法中,就会调用父类的类方法;
使用场景:子类重写父类的方法时想保留父类的一些行为;

5.多态

程序中的多态:父类指针指向子类对象;
2.多态的条件:
有继承关系;
子类重写父类方法;
父类指针指向子类对象;
表现:当父类指针指向不同的对象,通过父类指针调用被重写的方法的时候,会执行该指针所指向的

//动态类型:在编译的时候编译器只会检查当前类型对应的类中有没有需要调用的方法;在运行的时候系统会自动判断a1的真实类型。(a1对应的类中有eat方法,就会编译成功)Animal *a1=[Dog new];[a1 eat];Animal *a2=[Cat new];[a2 eat];//在多态中,如果想调用子类特有的方法,必须强制类型转换为子类才能调用;Animal *a1=[Dog new];Dog *d1=(Dog *)a1;//kanjia是Dog特有的方法,需要强制转换[d1 kanjia];

-(void) food:(Animal *)a{
[a eat];
}
//多态的原理:
多态的注意点:
1.如果存在多态,父类是可以访问子类特有的方法;
假如子类有一个特有的方法bark
[dog bark];
Animal *an2=[Dog new];
[(Dog *)an2 bark]; //父类指针,强制转换

6.实例变量修饰符

默认情况下,所以实例变量都是protected。
@public:可以在其他类中访问被public修饰的成员变量;也可以在本类中访问。
@privated:只能在本类中访问
@protected:
@package:如果在其他包中访问,就是privated,如果是在当前代码中所在的包中访问就是public的。

description方法:

%@是用来打印对象的,其实本质是用于打印字符串(默认打印对象 地址);调用%@打印某个对象,系统内部默认就会调用父类的description方法。该方法会返回默认的字符串格式就是<类名称:对象地址>

//在description方法中尽量不要利用self来获取成员变量
//调用class返回的类对象,类型是Class
Class c=[Person class]