Objective-C2.0發(fā)布莺奔,新特性:自動(dòng)聲明欣范、補(bǔ)全屬性、點(diǎn)語(yǔ)法令哟,大大提高了開(kāi)發(fā)效率恼琼,現(xiàn)在我將用自動(dòng)聲明屬性的方法重構(gòu)這個(gè)類(lèi)。
自動(dòng)屬性聲明只可在類(lèi)接口屏富、分類(lèi)接口晴竞、協(xié)議中聲明
在KNZPerson.h中,將成員變量_age的set/get方法聲明刪除掉狠半,然后聲明三個(gè)成員屬性:name噩死、age颤难、sex
<code>
//
// KNZPerson.h
// 自定義類(lèi)
//
// Created by 李陽(yáng) on 2016/10/7.
// Copyright ? 2016年 kenzo. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface KNZPerson : NSObject</br>
@property(nonatomic,copy)NSString *name;
@property(nonatomic,assign)int age;
@property(nonatomic,assign)BOOL sex;</br>
-(instancetype)initWithName:(NSString *)name age:(int)age sex:(BOOL)sex;
+(void)speak;
-(void)talk;
@end
</code>在KNZPerson.m中,將成員變量聲明和成員變量_age的set/get方法實(shí)現(xiàn)刪除掉
<code>
//
// KNZPerson.m
// 自定義類(lèi)
//
// Created by 李陽(yáng) on 2016/10/7.
// Copyright ? 2016年 kenzo. All rights reserved.
//
#import "KNZPerson.h"
@implementation KNZPerson
-(instancetype)initWithName:(NSString *)name age:(int)age sex:(BOOL)sex
{
self = [super init];
if (self) {
_name = name;
_age = age;
_sex = sex;
}
return self;
}
+(void)speak
{
NSLog(@"你好甜滨!speak!");
}
-(void)talk
{
NSLog(@"名字:%@,年齡:%d,男的:%d",_name,_age,_sex);
}
@end
</code>運(yùn)行
<code>
2016-10-08 08:39:23.815602 自定義類(lèi)[26131:1582661] 名字:kenzo,年齡:28,男的:1
2016-10-08 08:39:23.815805 自定義類(lèi)[26131:1582661] 名字:lucy,年齡:20,男的:0
2016-10-08 08:39:23.815843 自定義類(lèi)[26131:1582661] person:29 歲,person2:21 歲
Program ended with exit code: 0
</code>運(yùn)行結(jié)果沒(méi)有改變乐严,重構(gòu)類(lèi)最大特點(diǎn)就是優(yōu)化了類(lèi)內(nèi)部代碼而外部卻沒(méi)有絲毫影響。
自動(dòng)屬性聲明:@property
- 子類(lèi)可以繼承父類(lèi)在.h文件中聲明的屬性衣摩,不可以繼承在類(lèi)擴(kuò)展中聲明的屬性。
- 聲明的屬性自動(dòng)生成對(duì)應(yīng)的成員變量
- 比如:@property(nonatomic,assign)int age;捂敌,自動(dòng)生成成員變量_age(成員變量為@private私有類(lèi)型艾扮,子類(lèi)不可以訪問(wèn)),set方法-(void)setAge:(int)age,get方法-(int)age.
- 格式:@property(多線程特性占婉,讀寫(xiě)特性泡嘴,內(nèi)存管理特性)屬性類(lèi)型 屬性名稱
- 多線程特性:nonatomic,atomic
- 讀寫(xiě)特性:readwrite逆济,readonly
- 內(nèi)存管理特性:strong酌予,weak,copy奖慌,unsafe-unretain抛虫,retain,assign简僧。
詳情請(qǐng)看:自動(dòng)屬性聲明->屬性特性
這樣我們重構(gòu)了一個(gè)KNZPerson類(lèi)建椰,聲明了三個(gè)屬性,無(wú)需成員變量聲明和set/get方法聲明與實(shí)現(xiàn)岛马,大大地簡(jiǎn)化了代碼量棉姐。蘋(píng)果官方建議使用屬性聲明來(lái)代替成員變量聲明,有必要的時(shí)候才聲明成員變量啦逆。
點(diǎn)語(yǔ)法
Objective-C提供了新的訪問(wèn)成員變量方法:點(diǎn)語(yǔ)法
person.屬性 = >在“=”左邊相當(dāng)于相當(dāng)于set方法伞矩,在“=”右邊或打印代替占位符位置時(shí)相當(dāng)于get方法。
使用點(diǎn)語(yǔ)法重寫(xiě)代碼
<code>
[person setAge:29];
[person2 setAge:21];
NSLog(@"person:%d 歲,person2:%d 歲",[person age],[person2 age]);
</code>
如下
<code>
person.age = 29;//自動(dòng)轉(zhuǎn)換為[person setAge:29];
person2.age = 21;//自動(dòng)轉(zhuǎn)換為[person2 setAge:21];
NSLog(@"person:%d 歲,person2:%d 歲",person.age,person2.age);//自動(dòng)轉(zhuǎn)換為[person age],[person2 age];
</code>打印結(jié)果一樣
注意:使用點(diǎn)語(yǔ)法實(shí)際也是轉(zhuǎn)換為調(diào)用set/get方法