天天看點

黑馬程式員 --- OC中@property和@synthesize的用法

OC中@property和@synthesize的用法

OC類中有成員變量和方法部分,裡面的成員變量如果不用@property和@synthesize的話,我們就要這樣比如_age的通路在.h中:

#import <Foundation/Foundation.h>
@interface Person:NSObject
{
      int _age;
}
-(void)setAge:(int)age;
-(int)getAge;
@end
           

這兩個方法的聲明以及在.m中的實作部分如:

#import "Person.h"
@implementation Person
-(void)setAge:(int )age{
       _age = age;
}
-(int)getAge{
      return _age;
}
@end
           

由于OC中Xcode這個軟體給我們做了一些工作省了我們一些開發時間,比如Xcode4.4以前@property 用來自動生成成員變量的get/set方法聲明,如:@property int age;等于上面的get和set方法聲明,@synthesize是在.m檔案中定義set和get方法的實作,是不是省了好多時間,我們還可以給@synthesize a = _b; 表示用a的get和set方法,修改屬性b的值;在xcode4.4以後,@property int age;類自動幫我們聲明和實作,即先聲明一個成員變量_age,再自動生成get/set方法的聲明和get/set方法的實作,是不是很快,感覺挺人性化的。

在Person.h檔案中

#import <Foundation/Foundation.h>
@interface Person:NSObject
@property int age;
@end
           

在Person.m檔案中:

#import "Person.h"
@implementation Person
@end
           

@property 增強下重寫get和set方法

手動實作:1)如果手動實作了set方法,那麼編譯器就隻生成get方法和成員變量;

          2)如果手動實作了get方法,那麼編譯器就隻生成set方法和成員變量;

  3) 如果 set 和 get 方法都是手動實作的,那麼編譯器将不會生成成員變量,并且報錯;一般我們隻手動實作set方法。

Xcode 非常的智能,為我們做些節省開發時間的操作。