前言:
學過面向對象開發的都知道當編寫一個類的時候,對於成員變量需要些setter和getter方法,在java中我們都是自己寫,很煩…
在OC中有一個很ok的東西,叫做合成存取器.@property
使用方法很簡單,可以用這個來聲明成員變量,就可以省去setter和getter.寫一個簡單的demo幫助理解.
Demo//:
自定義類頭文件—Person.h:
#import <Foundation/Foundation.h>
//使用@property去聲明需要存取的成員變量
@interface Person : NSObject
//在ARC中用的比較多的就是nonatomic,assign,copy,strong
//nonatomic主要用於非多線程中,不上鎖效率高
//assign 常用數據類型:int,float,char等
//copy 強引用類型 用於不可變的類型:比如NSString
//strong 強引用類型 用於可變的類型
@property(nonatomic,assign)int age;
@property(nonatomic,copy)NSString *name;
-(void)sayHello;
@end
自定義類文件Person.m
#import "Person.h"
@implementation Person
-(void)sayHello
{
NSLog(@"Hello,EveryBody!");
}
@end
Main方法中調用:
// main.m
// OC-合成存取
//
// Created by mac on 15/9/25.
// Copyright (c) 2015年 macb. All rights reserved.
#import <Foundation/Foundation.h>
#import "Person.h"//這裏需要引入Person類的頭文件
int main(int argc, const char * argv[]) {
@autoreleasepool {
//當我們在一個自定義類的.h文件中使用了@property聲明瞭成員變量age之後,cocoa就會自動爲我們生成age的setter和getter方法
//在類外部調用的方法有兩種
// 1.一種是普通調用語法"[]",其中setter的方法名是setXX,比如setAge,看第18,19行調用示例 getter方法名是XXX,比如age,看第21行調用示例
// 2.另外一種是隻針對合成存取器的"."語法,不論setter還是getter方法名都是XXX,比如age,區別是setter還是getter主要是看是否有賦值操作. setter看20行調用示例 getter看21行調用
//注意:"."語法只有使用合成存取器時候纔可以用來調用方法,而且調用的是方法而不是變量本身,其它情況都是使用"[]"調用方法
Person *p1=[[Person alloc]init];
[p1 setName:@"錐子先生"];//"[]語法調用setter"
NSLog(@"\"[]\"語法去調用getter,姓名:%@",[p1 name]);//"[]語法調用getter"
p1.age=21;//"."語法調用setter
NSLog(@"\".\"語法去調用getter,年齡:%i",p1.age);//"."語法調用getter
[p1 sayHello];//正常方法
}
return 0;
}