Objective-C setter和getter
今天主要學(xué)習(xí)的setter和getter的使用方法, 按照昨天所學(xué)習(xí)的內(nèi)容,首先我們要?jiǎng)?chuàng)建一個(gè)工程,另外在創(chuàng)建一個(gè)Person類(lèi)!
?
=================================================================
在Person.h中 創(chuàng)建Person類(lèi)中的幾個(gè)實(shí)例變量, 聲明setter和getter方法 ? ?"上代碼"敢問(wèn)代碼是誰(shuí)!
#import <Foundation/Foundation.h>?
/*
?實(shí)例變量可見(jiàn)度
?1.@Public 公共可見(jiàn)度: 在類(lèi)的內(nèi)部和外部都可以進(jìn)行訪問(wèn),因?yàn)橥獠恳部梢栽L問(wèn),所以他破壞了類(lèi)的封裝特性.
?2.@Private私有可見(jiàn)度: 只有當(dāng)前類(lèi)才可以訪問(wèn),子類(lèi)也無(wú)法訪問(wèn),由于子類(lèi)也無(wú)法訪問(wèn),所以破壞了類(lèi)的繼承特性.
?3.@Protected受保護(hù)可見(jiàn)度:當(dāng)前類(lèi)以及子類(lèi)可以訪問(wèn).(是默認(rèn)的)也是最適合用的!
?*/
@interface Person : NSObject
{
? ? //定義Person類(lèi)的實(shí)例變量
? ? NSString *_name;//名字 屬于字符串,所以用NSString 并且要帶*
? ? NSString *_sex; //性別 屬于字符串,所以用NSString 并且要帶*
? ? NSInteger _age; //年齡 屬于常量,所以用int類(lèi)型,NSInteger是OC中表示常量的,不需要帶*
? ? CGFloat _weight;//體重 數(shù)據(jù)常量,CGFload相當(dāng)于fload,所以不需要帶*
}
//初始化方法
- (id)init;
?
//自定義初始化方法 形式: initWith + 接口部分的各個(gè)參數(shù) 例如:
- (id)initWtihName:(NSString *)name
?? ? ? ? ? ? ? sex:(NSString *)sex
?? ? ? ? ? ? ? age:(NSInteger)age ? //參數(shù)類(lèi)型不帶*
? ? ? ? ? ? weight:(CGFloat)weight; //參數(shù)類(lèi)型不帶*
//方法聲明? 打招呼
- (void)sayHi;
?
//對(duì)各個(gè)實(shí)例變量"統(tǒng)一"設(shè)置setter方法
//setter方法的格式 以set卡頭 + 實(shí)例變量(去掉下劃線,并且首字母大寫(xiě)):(參數(shù)類(lèi)型NSString)參數(shù)名
- (void)setName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight;
//對(duì)各個(gè)實(shí)例變量"分開(kāi)"設(shè)置setter方法
- (void)setName:(NSString *)name;
- (void)setSex:(NSString *)sex;
- (void)setAge:(NSInteger)age;
//(返回值)set(參數(shù)名)(參數(shù)類(lèi)型)(參數(shù)名)
- (void)setWeight:(CGFloat)weight;
?
//對(duì)各個(gè)設(shè)置好setter方法的實(shí)例變量, 分別設(shè)置getter方法
//getter格式:返回值為對(duì)應(yīng)實(shí)例變量的類(lèi)型,方法名為實(shí)例變量名去掉下劃線
- (NSString *)name;
- (NSString *)sex;
- (NSInteger)age;
- (CGFloat)weight;
?
/* 最好把setter和getter方法寫(xiě)在一起例如:
- (void)setName:(NSString *)name;
- (NSString *)name;
*/
@end
?
=================================================================
在Person.m文件中, 實(shí)現(xiàn)init方法 實(shí)現(xiàn)setter和getter的方法 ? "上代碼" 敢問(wèn)代碼是誰(shuí)!
#import "Person.h" ?//此處不要誤解是在Person.h中, 這里就是Person.m文件
@implementation Person
//初始化 對(duì)每個(gè)實(shí)例進(jìn)行初始的賦值
- (id)init
{
? ? _name = @"Jack";
? ? _sex = @"male";
? ? _age = 30; //常量類(lèi)型,所以不要用@"30"
? ? _weight = 160; //與age同理
? ? return self;
}
?
//調(diào)用父類(lèi)系統(tǒng)初始化的過(guò)程
- (id)initWtihName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight
{
? ? self = [super init];//調(diào)用父類(lèi)的方法
? ? if (self) { //如果調(diào)用了父類(lèi)的方法
? ? ? ? _name = name; // _name是最上面init中的參數(shù), name是initWithName后面的name
? ? ? ? _sex = sex; ? // 當(dāng)在main函數(shù)中name傳入新值的時(shí)候,_name就等于新的名字.
? ? ? ? _age = age;
? ? ? ? _weight = weight;
? ? }
? ? return self;
}
?
//========setter(賦值)和getter(取值)方法的實(shí)現(xiàn)========//
?
//方法的實(shí)現(xiàn)
- (void)sayHi
{
? ? NSLog(@"人都擁有打招呼的功能");//此處是對(duì)Person.h中聲明的方法進(jìn)行具體的實(shí)現(xiàn)!
}
?
//對(duì)各個(gè)實(shí)例變量"統(tǒng)一"實(shí)現(xiàn)setter(賦值)方法
//對(duì)各個(gè)實(shí)例變量"統(tǒng)一"實(shí)現(xiàn)getter(取值)方法
- (void)setName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight
{
? ? _name = name;
? ? _sex = sex;
? ? _age = age;
? ? _weight = weight;
}
?
//對(duì)各個(gè)實(shí)例變量"分別"實(shí)現(xiàn)setter(賦值)方法
//注:每個(gè)方法的實(shí)現(xiàn)都是與Person.h中聲明的都是一一對(duì)應(yīng)的親!
- (void)setName:(NSString *)name
{
? ? _name = name;//將傳入進(jìn)來(lái)的name的值賦給_name;可能有點(diǎn)繞,要仔細(xì)想想.
}
- (void)setSex:(NSString *)sex
{
? ? _sex = sex;
}
-(void)setAge:(NSInteger)age
{
? ? _age = age;
}
- (void)setWeight:(CGFloat)weight
{
? ? _weight = weight;
}
?
//對(duì)各個(gè)實(shí)例變量"分別"實(shí)現(xiàn)getter(取值)方法
//注:每個(gè)方法的實(shí)現(xiàn)都是與Person.h中聲明的都是一一對(duì)應(yīng)的親!
?
- (NSString *)name //name的getter方法實(shí)現(xiàn)
{
? ? return _name;
? ? //return回去的是最上面init中的_name 下面的方法同理.
}
- (NSString *)sex //sex的getter方法實(shí)現(xiàn)
{
? ? return _sex;
}
- (NSInteger)age? //age的getter方法實(shí)現(xiàn)
{
? ? return _age;
}
-(CGFloat)weight? //weight的getter方法實(shí)現(xiàn)
{
? ? return _weight;
}
?
//建議書(shū)寫(xiě)格式: 可以采用setter和getter方法寫(xiě)在一塊的方式
/*
- (void)setName:(NSString *)name
{
? ? _name = name;
}
-(NSString *)name
{
? ? return self;
}
*/
@end
=================================================================
在Main函數(shù)中,導(dǎo)入Person.h文件, 創(chuàng)建Person類(lèi)的對(duì)象,并且對(duì)對(duì)象進(jìn)行賦值,取值 ? ? "上代碼" 敢問(wèn)代碼是誰(shuí)!
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
? ? //創(chuàng)建一個(gè)Person的對(duì)象
? ? Person *per = [[Person alloc] init];
? ? //給Person的對(duì)象per賦值名字
? ? [per setName:@"Henry"];
? ? //給對(duì)象per賦值性別
? ? [per setSex:@"male"];
? ? //給對(duì)象per賦值年齡
? ? [per setAge:30];
? ? //給對(duì)象per賦值體重
? ? [per setWeight:160];
? ? //NSLog(@"per的名字是:%@",per); ? ?此時(shí)打印per只是打印一個(gè)地址, 要給per對(duì)象一個(gè)指定的打印的實(shí)例.
? ? //如果此時(shí),打印的結(jié)果是:? ? per的名字是:<Person: 0x100201e10> ?
??
? ? NSLog(@"per的名字:%@ 性別:%@ 年齡:%ld 體重:%.2f",[per name],[per sex],[per age],[per weight]);
? ? //打印結(jié)果:per的名字:Henry 性別:male 年齡:30 體重:160.00
?? ?
? ? //為對(duì)象per重新賦值
? ? [per setName:@"Lily" sex:@"female" age:22 weight:96];
? ? NSLog(@"per的名字:%@ 性別:%@ 年齡:%ld 體重:%.2f",[per name],[per sex],[per age],[per weight]);
? ? //打印結(jié)果:per的名字:Lily 性別:female 年齡:22 體重:96.00
? ? //per來(lái)調(diào)用Person類(lèi)的方法
? ? [per sayHi];
? ? return 0;
}
好了,OC第二個(gè)課程學(xué)完了, 我也不知道是否會(huì)有人看我寫(xiě)的博客, 如果有看到這些的朋友,能夠給與一些建議, 因?yàn)槲乙彩浅鯇W(xué)者, 大家互相激勵(lì).
今天時(shí)間還算早,我在去學(xué)習(xí)下一章的內(nèi)容
轉(zhuǎn)載于:https://www.cnblogs.com/why2wm/p/4411170.html
總結(jié)
以上是生活随笔為你收集整理的Objective-C setter和getter的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python并发与并行的新手指南
- 下一篇: 利用js种的正则删除html标签