1)根據以前學的,呼叫方法是這樣的
student *stu = [student new];
[stu setage:100];
int age = [stu age];
如果用點語法,這樣就可以呼叫了
stu.age = 100
;int age = stu.age
;
2)點語法的本質
其實點語法的本質還是方法呼叫,當使用點語法時,編譯器會自動展開成相應的方法。
3)在xcode專案建立乙個class類,叫person。在person.h中申明
#import
@inte***ce
person : nsobject
// 年齡的getter和setter
- (void)setage:(int)age;
- (int)age;
- (void)setname:(nsstring *)name;
- (nsstring *)name;
@end
在person.m中實現類的功能
#import "person.h"
@implementation
person
- (void)setage:(int)age
- (int)age
#pragma mark - 姓名的seter和getter
#pragma mark 姓名的set方法
- (void)setname:(nsstring *)name
#pragma mark 姓名的get方法
- (nsstring *)name
@end
在main.m中
#import
#import "person.h"
int main(int argc, const
char * argv)
- (int) age
這兩個方法都將會引發死迴圈。
1)@property用在@inteface中用來自動生成setter和getter的宣告。例如:
用@property int age;就可以代替下面的兩行
-(int)age;
-(void)setage:(int)age;
@synthesize
用在@implementation中,用來自動生成setter和getter的實現。
- (int)age
- (void)setage:(int)age
2)注意細節:
1. @synthesize age = _age;setter和getter實現中會訪問成員變數_age ,如果成員變數_age不存在,就會自動生成乙個@private的成員變數_age。
2. 若手動實現了setter方法,編譯器就只會自動生成getter方法,若手動實現了getter方法,編譯器就只會自動生成setter方法,若同時手動實現了setter和getter方法,編譯器就不會自動生成不存在的成員變數。
3. @propert的新特性
自從xcode 4.x後,@property就獨攬了@synthesize的功能。也就是說,@property可以同時生成setter和getter的宣告和實現
預設情況下,setter和getter方法中的實現,會去訪問下劃線 _ 開頭的成員變數.
4)例項執行
建立person.h檔案
#import
@inte***ce
person : nsobject
//@property
int age;
@end
person.m檔案
#import "person.h"
@implementation
person
@end
在main.m中
#import
"person.h"
int main(int argc, const
char * argv)
執行結果
可以看出要想懶得動手,乙個@property就搞定了。
補充一句,如果是用@property申明的屬性,而且沒有指明屬性的作用域,那麼這個屬性預設是protect屬性的。
好了,今天就學到這裡了
OC 特有語法1
asp.net unity開發 net培訓 期待與您交流!一 利用點語法替換set方法和get方法 1.方法呼叫 student stu student new stu setage 10 int age stu age 這是set和get的物件呼叫方法 2 點語法 stu.age 10 int a...
OC特有語法 多型
多型 指標以父類型別宣告,但實際執行時指向的是其某個子類的物件,當用這個指標呼叫方法時,會根據其指向的不同子類物件呼叫不同的物件方法。這種現象叫多型。多型的前提是子類會覆蓋父類的方法。多型的應用 需要乙個新的函式專門用來餵狗 void feed dog d 如果這個時候也需要喂貓,那就應該重寫新乙個...
OC特有語法 SEL
sel就是對方法的一種包裝。包裝的sel型別資料它對應相應的方法位址,找到方法位址就可以呼叫方法。在記憶體中每個類的方法都儲存在類物件中,每個方法都有乙個與之對應的sel型別的資料,根據乙個sel資料就可以找到對應的方法位址,進而呼叫方法。inte ce person nsobject void t...