OC之合成存取器總結

前言:

學過面向對象開發的都知道當編寫一個類的時候,對於成員變量需要些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;
}

運行:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章