您的位置:首页 > 职场人生

黑马程序员 OC--------一些关键字学习

2014-04-03 22:48 155 查看
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a
href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

self关键字
类方法中调用类方法 // OK 类方法中可以通过self来调用类方法
类方法中调用对象方法 // 不OK 类方法不可以通过self调用对象方法
对象方法中调用对象方法 // ? 对象方法通过self调用对象方法

对象方法中调用类方法 // OK 对象方法中不可以通过self调用类方法
总结:
1.>谁调用当前方法self就代表谁
*self出现在类方法中self代表当前类
*self出现在对象方法中slef代表对象
self一定是在类的方法中使用(类方法/对象方法)

在对象方法中访问成员变量的集中方式:
1>直接通过成员变量名称访问
2>通过self调用set方法访问
3>通过self->成员变量名称的方法访问

self注意:
> 不能在对象方法中调用同名的对象方法(死循环)

> 不能在类方法中调用同名的类方法(死循环)

super关键字

总结:
super作用:
1.在子类中调用父类的某个方法
2.super在对象方法中就会调用父类的对象方法
super在类方法中就会调用父类的类方法

super的使用场合:
子类重写父类的方法的时候,想保留父类的方法时就可以使用super

self注意:
> 不能在对象方法中调用同名的对象方法(死循环)

> 不能在类方法中调用同名的类方法(死循环)

有的情况下用self也可以调用父类的方法,但是在真实开发中建议使用super

点语法
给成员变量赋值的三种方法
1.直接访问成员变量赋值

2.通过get set方法赋值

3.通过点语法赋值
p1.age不是直接访问成员变量

点语法的本质还是访问get set方法

例如:P1.age=55;

当.语法在等号左边的时候会自动转换成 [p1 setAge:55];

例如: int a = p1.age;

当.语法不在等号左边的时候会自动转换成 [p1 age];

4.死循环注意

-(void)setAge:(int)age{

//下面代码会引发死循环

self.age = age;

}

-(int)age{

//下面代码会引发死循环

return self.age;

}

成员变量的作用域
专门用来控制成员变量的作用域的关键字
@public
用public修饰的成员变量可以在其它类中访问,
也可以在本类中访问,
在子类中可以访问被public修饰的成员变量
@public的作用范围,是从编写的那一行开始一直到遇到下一个修饰符为止

@private
用private修饰的成员变量不能在其它类中访问,
可以在本类中访问被private修饰的成员变量,
在子类中不能访问被private修饰的成员变量

@protected
用protected修饰的成员变量不能在其它类中访问
可以在本类中访问被protected修饰的成员变量,
在子类中可以访问被protected修饰的成员变量

默认情况下所有的成员变量都是受保护的

property关键字和synthesize关键字

@property关键字:

在xcode4.4以前,property关键字是专门用来生成get/set方法的声明的

1. 告诉property要生成哪个成员变量的get/set方法

2. 告诉property生成的get/set方法的变量的类型

例如:

- (void)setAge:(int)age;

- (int)age;
也可以写成

@property int age;

@synthesize关键字是专门用来生成get/set方法的实现

例如:

@synthesize age;

如果没有指定赋值给谁,会赋值给@synthesize后面同名的成员变量

如果要生成多个属性的get/set方法的实现可以一行搞定

例如:

@synthesize age = _age, number = _number, name = _name;

但不建议这么写 因为可读性太低

在xocode4.4以后,@property不仅仅会生成get/set方法的声明,

还会生成get/set方法的实现

如果没有编写成员变量,property会自动生成一个_开头的成员变量,会在.m文件中生成

注意点:如果想在子类中使用该成员变量,必须自己手动编写成员变量

通过property自动生成的get/set方法和synthesize不同,

property自动生成的是赋值给_开头的成员变量

property只会给我们生成最简单的get set方法,而不会进行数据过滤

如果要进行数据过滤,就必须直接重写get/set方法

但是注意:如果同时重写了 get/set方法,property就不会帮我们生成_开头的成员变量

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a
href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐