OC基本
setter-getter方法
由于将来我们经常需要定义一些方法来操作成员变量,
而每个方法都必须有一个有意义的名称,
而想名字非常难,所以就有了getter-setter方法
getter-setter方法格式和写法都是固定的,
所以只要有getter-setter方法我们就不用煞费心思的去想方法名称了,解决我们起名字难问题
并且getter-setter方法还是程序员之间的一种规范,
以后别人只要想给属性赋值立刻就会想到getter-setter方法,这样降低了程序员之间的沟通成本
/*
setter方法:
作用: 设置成员变量的值
格式:
1. setter方法一定是对象方法
2. 一定没有返回值
3. 一定以set开头, 并且set后面跟上需要设置的成员变量的名称去掉下划线, 并且首字母大写
4. 一定有参数, 参数类型一定和需要设置的成员变量的类型一致, 并且参数名称就是成员变量的名称去掉下划线
*/
- (void)setSize:(int)size;
/*
getter方法:
作用: 获取成员变量的值
格式:
1. getter方法一定是对象方法
2.一定有返回值, 而且返回值一定和获取的成员变量的类型一致
3.方法名称就是获取的成员变量的名称去掉下划线
4. 一定没有参数
*/
- (int)size;
点语法
如果给属性提供了getter和setter方法, 那么访问属性就又多了一种访问方式 , 点语法
点语法其实它的本质是调用了我们的setter和getter方法
点语法是一个编译器的特性, 会在程序翻译成二进制的时候将.语法自动转换为setter和getter方法
如果点语法在=号的左边, 那么编译器会自动转换为setter方法
如果点语法在=号的右边, 或者没有等号, 那么编译器就会自动转换为getter方法
p.name = @"mnj";
// [p setName:@"mnj"];
p.age = 30;
p.height = 1.75;
NSLog(@"age = %i, name = %@, height = %f", p.age, p.name, p.height);
// p.age
// [p age];
/*
点语法的注意点:
点语法一般用于给成员变量赋值, 如果不是给成员变量赋值一般情况下不建议使用, 但是也可以使用
*/
p.test; // [p test];
self关键字
self不能离开类,离开类之后没有任何含义
如果self在对象方法中, 那么self就代表调用当前对象方法的那个对象
如果self在类方法中, 那么self就代表调用当前类方法的那个类
总结:
我们只用关注self在哪一个方法中 , 如果在类方法那么就代表当前类, 如果在对象方法那么就代表"当前调用该方法的对象"
注意:
>self会自动区分类方法和对象方法, 如果在类方法中使用self调用对象方法, 那么会直接报错
>不能在对象方法或者类方法中利用self调用当前self所在的方法
使用场景:
可以用于在对象方法之间进行相互调用
可以用于在类方法之间进行相互调用
可以用于区分成员变量和局部变量同名的情况
通过self调用方法的格式:[self 方法名];
通过self访问成员变量格式:self->成员变量名
self使用注意
同时有对象方法和类方法存在的时候,self不会调错
self只能在方法中使用;
不要使用self来调用函数,也不可以在函数内部使用self;
使用self调用本方法,导致死循环调用。
Super关键字
super是个编译器的指令符号,只是告诉编译器在执行的时候,去调谁的方法.
>+ self是一个隐私参数;
self refers to the object receiving a message in objective-C programming.
>+ super 并不是隐藏的参数,它只是一个“编译器指示符”,它和 self 指向的是相同的消息接收者
super is a flag that tells the compiler to search for the method implementation in a very different place. It begins in the superclass of the class that defines the method where super appears.
2.super的作用
1.直接调用父类中的某个方法
2.super在对象方法中,那么就会调用父类的对象方法
super在类方法中,那么就会调用父类的类方法
使用场合:
子类重写父类的方法时想保留父类的一些行为
实例变量
实例变量的作用域!
实例变量修饰符作用域: 从出现的位置开始, 一直到下一个修饰符出现
如果没有遇到下一个实例变量修饰符, 那么就会修饰后面所有的实例变量
1)@public (公开的)在
有对象的前提下,任何地方都可以直接访问。
2)@protected (受保护的)只能在当前类和子类的对象方法中访问
3)@private (私有的)只能在当前类的对象方法中才能直接访问
4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中相当于@public,在框架外部相当于@private
2.变量修饰符在子类中的访问
1)@private私有成员是能被继承,也不能被外部方法访问。
2)@public 公有成员能被继承,也能被外部方法访问。
3)@protected 保护成员能够被继承,不能够被外部方法访问。
3.实例变量作用域使用注意事项
(1)在@interface @end之间声明的成员变量如果不做特别的说明,那么其默认是protected 的。
(2)一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它都拥有,只是有的它不能直接访问。例如@private的