---------------------- ASP.Net+Unity開發、.Net教育訓練、期待與您交流! ----------------------
一、點文法:通過"."調用類中的set和get方法來設定和通路成員變量
例如:
<span style="font-size:18px;">#import <Foundation/Foundation.h>
@interface Person : NSObject
{
@private
int _age;
@public
int _id;
}
- (int)age;
- (void)setAge:(int)age;
@end
@implementation Person
- (int)age {
return _age;
}
- (void)setAge:(int)age {
if(age < 0) {
age = 1;
}
_age = age;
}
@end
@interface Student : Person
@end
@implementation Student
@end
int main() {
Person *p = [Student new]; //學生同時也是人
p.age = 10; //這句話等同于[p setAge]
NSLog(@"%d",p.age); //OC會自動檢測是通路還是設定成員變量,這裡為通路是以等同于[p age];
return 0;
}</span>
注意:使用點文法設定成員變量在許多語言中都存在,不過在oc中,點文法不是直接操縱成員變量,而是調用set和get方法。
----------------------------------------------------------------------------------------------------------------------------------------------------------
二、@property:與@synthesize共用,讓OC自動生成get和set方法,在xcode4.4以後,@synthesize功能已經被@property取代,不過還有一個功能,我們通過例子來介紹。
先說下@property三個功能:1、聲明一個成員變量的get和set方法;
2、實作該成員變量的get和set方法;
3、如果這個成員變量沒有定義,那麼會自動生成一個以下劃線"_"開頭的變量(預設是通路屬性為@private);
例如:
<span style="font-size:18px;">#import <Foundation/Foundation.h>
@interface Person : NSObject
{
// int _age; //如果沒有定義該成員變量,那麼會自動生成這個名字的成員變量。
int age; //如果變量名字這樣命名,那麼@property會不清楚使用這個變量還是_age這個變量,這時我們就要使用@synthesize來幫助@property取消歧義。
}
@property int age; //等同于下面兩句
//- (int)age;
//- (void)setAge:(int)age;
@end
@implementation Person
@synthesize age = age; //指明使用age這個變量,而不是生成_age
@end
int main() {
Person *p = [Person new];
p.age = 10;
NSLog(@"%d",p.age);
return 0;
}</span>
注意:使用@property可以幫助我們省掉許多不必要的代碼,但是如果我們想讓某個類的子類通路該類的成員變量,就必須自己定義變量,而不用@property生成,因為它生成的是具有@private屬性的成員變量。
---------------------- ASP.Net+Unity開發、.Net教育訓練、期待與您交流! ----------------------詳細請檢視:www.itheima.com