黑马程序员 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>、期待与您交流! ----------------------
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>、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员-IOS学习笔记 OC 关于对象方法类方法的一些概念
- 黑马程序员-oc-一些关键字区别(APD)
- 黑马程序员——OC语言学习——Xcode开发初始化、点语法、成员变量作用域、关键字@property和@synthesize
- 黑马程序员_OC关键字学习
- 黑马程序员——OC语言学习——关键字id、构造方法、Category-分类、类的本质、 description方法、 SEL方法
- 黑马程序员——黑马IOS面试学习三:Objective-C 中一些关键字和概念的总汇——黑马 ios 技术博客
- 黑马程序员——OC学习——self和super关键字
- 黑马程序员———OC学习第三天(@property和@synthesize关键字)
- 黑马程序员 OC------内存管理学习
- 黑马程序员---学习笔记18:OC基础(5)
- 黑马程序员——OC学习之内存管理ARC
- 黑马程序员-[OC]学习之旅-对象和类
- 黑马程序员——OC学习小结------arc,block,protocol(协议)
- 黑马程序员——OC基础学习(三)---从传统setter方法和getter方法到@property增强型使用(体验代码的优化过程)
- 黑马程序员——OC学习笔记 类与对象的使用
- 黑马程序员-IOS学习笔记 OC创建对象时 系统做了些什么
- 黑马程序员:OC学习日记之self
- 黑马程序员-OC学习笔记-点方法、成员变量作用域以及set方法和get方法@property的综合题
- 黑马程序员——OC语言学习——ARC机制、block代码块、protocol协议、protocol协议的应用
- 黑马程序员——Foundation框架学习——OC结构体、字符串、OC集合、NSNumber,NSValue、OC时间对象