------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、@property和@synthesize
@property和@synthesize是OC的编译器的特性,这两个关键字可以帮助我们自动生成属性的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;会自动生成_speed的setter和getter实现
相当于
<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的申明与getter和setter的实现。
二、id
id在OC中是一个万能指针,能指向和操作任何OC对象,相当于NSObject *。一般用于OC方法的参数,可以传任何对象进去。
三、构造方法
我们之前创建对象时,是使用的new类方法。其实,这个类方法内部调用了两个方法:alloc和init。alloc为对象分配空间,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