黑马程序员--Objective-C——OC特有语法一

来源:互联网 发布:数据仓库和数据集市 编辑:程序博客网 时间:2024/04/28 22:41

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、@property@synthesize

@property@synthesizeOC的编译器的特性,这两个关键字可以帮助我们自动生成属性的get方法和set方法。

 

<span style="background-color: rgb(255, 255, 255);">#import <Foundation/Foundation.h> @interface Car : NSObject{    //int _speed;    //int _wheels;}@property int speed;@property int wheels;@end</span>


@property int speed; 这句代码会自动生成属性_speed的声明

<span style="background-color: rgb(255, 255, 255);">- (void)setSpeed:(int)speed;- (int)speed;</span>

 

<span style="background-color: rgb(255, 255, 255);">#import "Car.h"@implementation Car@synthesize speed = _speed;@synthesize wheels = _wheels;@end</span>


@synthesize speed = _speed;会自动生成_speedsettergetter实现

相当于

<span style="background-color: rgb(255, 255, 255);">- (void)setSpeed:(int)speed{_speed = speed;}- (int)speed{return speed;}</span>


需要注意的是,如果在声明中没有这个属性,@synthesize会自动创建对应的以下划线开头的@Private类型的成员变量。如果写成@synthesize speed;,则会访问名字为speed的成员变量。自从XCode4.4以后,@property就包含了synthesize的功能。因此只要在声明中写一个@property int speed;就可完成成员变量_speed的申明与gettersetter的实现。

 

 

二、id

idOC中是一个万能指针,能指向和操作任何OC对象,相当于NSObject *。一般用于OC方法的参数,可以传任何对象进去。

 

三、构造方法

我们之前创建对象时,是使用的new类方法。其实,这个类方法内部调用了两个方法:allocinitalloc为对象分配空间,init执行对象的初始化。

Person *p = [Person new];

等价于

Person *p = [[Person alloc] init];

这个init方法,就是系统默认的构造方法。

我们可以重写这个方法,在创建对象时就会执行我们重写的方法,可以实现一些我们的编程需要。

重写构造方法的格式

<span style="background-color: rgb(255, 255, 255);">- (id)init{// 1.需要先执行父类的构造方法,初始化父类中的属性,返回的id对象赋值给当前对象 self = [super init];// 2.如果父类初始化成功if (self != nil){  // 3.执行当前对象的初始化操作}// 4.返回初始化完的对象return self;}</span>


如果构造方法含有参数,使用initWith... and....

例如initWithName:(NSString *)name andAge:(int)age



0 0
原创粉丝点击