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

黑马程序员---OC特有语法(一)

2015-04-08 12:49 225 查看
-----------------Java培训、Android培训、IOS培训、.Net培训期待与您交流------------------------

一、点语法

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息