OC基本

settergetter方法

 

 

 

 

由于将来我们经常需要定义一些方法来操作成员变量,

而每个方法都必须有一个有意义的名称,

而想名字非常难,所以就有了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

 

 

 

 

 

 

 

 

 

posted @ 2015-11-26 14:25  a滴答  阅读(214)  评论(0编辑  收藏  举报