黑马程序员---OC特有语法(一)
2015-04-08 12:49
225 查看
-----------------Java培训、Android培训、IOS培训、.Net培训期待与您交流------------------------
一、点语法
1.点语法的本质:
点语法的本质还是方法调用;
当使用点语法时,编译器会自动展开成相应的方法。
2.点语法实现过程
在编译过程中,检测到点语法的语句时,先得到点前面的实例类名p,再得到点后面的age,前面加上set,a变A
组成setAge,是声明的age的set方法。
如果p.age后面有'=',是_age的色图方法,如果没有是_age的get方法。
二、成员变量的作用域(直接访问)
1.基本概念:
局部变量,全局变量都有自己的作用域,成员变量也不例外。
2.类型(默认什么都不写,是@protected):
@private:只能在当前类的实现@implementation中直接访问(@implementation中声明成员变量默认是@private);
@protected:可以在当前类以及子类的实现@implementation中直接访问(@interface中声明成员变量默认是@protected);
@public:任何地方都可以直接访问对象的成员变量;
@package:同一个“体系内”(框架)可以访问,介于@private和@public之间;
声明在main函数后面的成员变量都不能直接访问。
3.继承补充:
父类\超类:super class;
子类:subclass\subclasses;
OC中继承是单继承,一个子类只能用一个父类。
4.@implementation补充:
没有@interface,只有@implementation也可以创建一个类。
三、@property和@synthesize
1.@property和@synthesize:
@property:可以自动生成某个成员变量的setter和getter方法的声明,用在@interface中;
@synthesize:可以自动生成某个成员变量的setter和getter方法的实现,用在@implementation中。
2.@synthesize:
@synthesize xxx;默认会访问xxx这个成员变量,如果xxx不存在,自动生成一个@private的成员变量xxx;
@synthesize xxx = _xxx;默认会访问xxx这个成员变量,如果_xxx不存在,自动生成一个@private的成员变量_xxx。
3.手动实现:
若手动实现了setter方法,编译器就只会自动生成getter方法;
若手动实现了getter方法,编译器就只会自动生成setter方法;
若手动同时实现setter和getter方法,编译器就不会自动生成不存在的成员变量。
4.自动实现:
从Xcode4.x后,@property就独揽了@synthesize的功能,也就是说,@property可以同时生成setter和getter的声明和实现;
默认情况下,setter和getter方法中的实现会去访问下划线_开头的成员变量;
默认会访问_xxx成员变量,不存在,自动创建@private的成员变量_xxx。
5.使用注意
同类型成员变量可以同时生成方法声明,实现
@property int speed, wheels;
@synthesize speed = _speed, wheels = _wheels;
一、点语法
1.点语法的本质:
点语法的本质还是方法调用;
当使用点语法时,编译器会自动展开成相应的方法。
2.点语法实现过程
<pre name="code" class="objc">//文件Person.h @interface Person : NSObject { int _age; } - (void)setAge:(int)age; - (int)age; @end //文件person.m @implementation Person - (void)setAge:(int)age { _age = age; } - (int)age { return _age; } @end //文件main.m Person *p = [Person new]; p.age = 10; // [p setAge:10];
在编译过程中,检测到点语法的语句时,先得到点前面的实例类名p,再得到点后面的age,前面加上set,a变A
组成setAge,是声明的age的set方法。
如果p.age后面有'=',是_age的色图方法,如果没有是_age的get方法。
二、成员变量的作用域(直接访问)
1.基本概念:
局部变量,全局变量都有自己的作用域,成员变量也不例外。
2.类型(默认什么都不写,是@protected):
@private:只能在当前类的实现@implementation中直接访问(@implementation中声明成员变量默认是@private);
@protected:可以在当前类以及子类的实现@implementation中直接访问(@interface中声明成员变量默认是@protected);
@public:任何地方都可以直接访问对象的成员变量;
@package:同一个“体系内”(框架)可以访问,介于@private和@public之间;
声明在main函数后面的成员变量都不能直接访问。
3.继承补充:
父类\超类:super class;
子类:subclass\subclasses;
OC中继承是单继承,一个子类只能用一个父类。
4.@implementation补充:
没有@interface,只有@implementation也可以创建一个类。
三、@property和@synthesize
1.@property和@synthesize:
@property:可以自动生成某个成员变量的setter和getter方法的声明,用在@interface中;
@synthesize:可以自动生成某个成员变量的setter和getter方法的实现,用在@implementation中。
2.@synthesize:
@synthesize xxx;默认会访问xxx这个成员变量,如果xxx不存在,自动生成一个@private的成员变量xxx;
@synthesize xxx = _xxx;默认会访问xxx这个成员变量,如果_xxx不存在,自动生成一个@private的成员变量_xxx。
3.手动实现:
若手动实现了setter方法,编译器就只会自动生成getter方法;
若手动实现了getter方法,编译器就只会自动生成setter方法;
若手动同时实现setter和getter方法,编译器就不会自动生成不存在的成员变量。
4.自动实现:
从Xcode4.x后,@property就独揽了@synthesize的功能,也就是说,@property可以同时生成setter和getter的声明和实现;
默认情况下,setter和getter方法中的实现会去访问下划线_开头的成员变量;
默认会访问_xxx成员变量,不存在,自动创建@private的成员变量_xxx。
<span style="font-size:14px;"> @interface Person : NSObject { int _age; } // @property:可以自动生成某个成员变量的setter和getter声明 @property int age; //- (void)setAge:(int)age; //- (int)age; @end @implementation Person // @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量 @synthesize age = _age; @end</span>
5.使用注意
同类型成员变量可以同时生成方法声明,实现
@property int speed, wheels;
@synthesize speed = _speed, wheels = _wheels;
// @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量 @synthesize age = _age; @end
相关文章推荐
- 黑马程序员——OC基础---OC特有语法
- 黑马程序员_OC特有语法
- 黑马程序员--oc:特有语法2
- 黑马程序员-8-Objective-C学习笔记(OC特有语法)
- 黑马程序员---iOS-OC特有的语法1
- 黑马程序员——Objective-C语言知识点总结之OC特有语法
- 黑马程序员_OC的特有语法
- 黑马程序员 OC语言 - 4 OC特有语法
- 黑马程序员——OC语言------OC特有语法:分类、description、类对象、SEL
- 黑马程序员—OC(归纳总结OC特有的语法)
- 黑马程序员_oc特有语法一:分类Category和类扩展
- 黑马程序员-OC语言基础:OC特有语法
- 黑马程序员---OC特有的语法
- 黑马程序员(OC特有语法-block和-Protocol)
- 黑马程序员 oc的特有语法
- 黑马程序员-IOS-OC基础-OC特有语法
- 黑马程序员--Objective-C——OC特有语法一
- 黑马程序员--Objective-C——OC特有语法二
- 黑马程序员_ios基础总结9_OC特有语法
- 黑马程序员——OC---OC特有语法01