OC:封裝(二)??

  • 版權(quán)聲明:本文為博主原創(chuàng)文章孩革,未經(jīng)博主允許不得轉(zhuǎn)載。
1.鎖定頭文件的方法
1. 打開終端
2. 進(jìn)入到Xcode的目錄, 命令:   cd /Applications/Xcode.app
3. 把系統(tǒng)頭文件修改為只讀, 命令:   sudo chown -hR root:wheel Contentss
4. 好處:防止誤刪勉耀,誤改頭文件!```


###2疹蛉、封裝

>封裝的目的:就是為了達(dá)到高內(nèi)聚低耦合辉阶;
   內(nèi)聚:模塊內(nèi)部各部分之間的關(guān)聯(lián)程度创倔;
   耦合:模塊與模塊之間的關(guān)聯(lián)程度;
   內(nèi)聚和耦合有一個(gè)條件改變琢歇,必然會(huì)導(dǎo)致另一個(gè)條件改變(耦合低了兰怠,內(nèi)聚必然增高)
-  (eg:甲乙城市的例子):

//Person.h
@interface Person : NSObject
//實(shí)例變量
{
//實(shí)例變量可見度修飾的實(shí)例變量范圍:從書寫的哪一行開始,到下一個(gè)修飾符結(jié)束李茫,或者碰到大括號(hào)結(jié)束揭保;
@public
NSString *_name;
@protected//被protected被保護(hù)的, 修飾的實(shí)例變量只能在內(nèi)部和子類中直接訪問魄宏。直接就是通過實(shí)例變量名來訪問
NSInteger _age;
NSString *_sex;
@private //私有的,被private 修飾的實(shí)例變量 只能在類的內(nèi)部直接訪問 子類中也不可以訪問
NSString *_clour;}
//被protected修飾的實(shí)例變量不能在類的外邊訪問秸侣,這時(shí)需要給這些實(shí)例變量增加賦值的方法
//設(shè)置器 set 方法
//設(shè)置器的書寫格式
1>對象方法 以 - 號(hào)開頭
2>返回值類型一定是void
3>方法名一定以set 開頭,后面跟上實(shí)例變量去掉下劃線并且首字母大寫
4>一定有參數(shù)宠互,并且參數(shù)類型要和實(shí)例變量的類型保持一致,參數(shù)名就是實(shí)例變量去掉下劃線
//age 的setter 方法

  • (void)setAge:(NSInteger )age;
    //訪問器 get 方法

  • (NSInteger)age;
    //聲明_sex的get方法

  • (NSString *)sex;

  • (void)setClour:(NSString *)clour;

  • (NSString *)clour;
    訪問器的書寫格式:
    1>對象方法味榛,以 - 開頭
    2>一定有返回值,且返回值類型要和實(shí)例變量的類型保持一致
    3>方法名實(shí)例變量去掉下滑線
    */
    //聲明_sex的getter方法

  • (void)setSex:(NSString *)sex;
    Person.m
    @implementation Person

  • (void)setAge:(NSInteger )age{
    //通過外界傳輸?shù)膮?shù)給實(shí)例變量賦值
    _age = age;
    }

  • (void)setSex:(NSString *)sex{
    _sex = sex;
    }

  • (NSInteger)age{
    //get方法返回的是實(shí)例變量
    return _age;
    }

  • (NSString *)sex{
    //get方法返回的是實(shí)例變量
    return _sex;
    }
    //@private的訪問

  • (void)setClour:(NSString *)clour{
    _clour = clour;
    }

  • (NSString *)clour{
    return _clour;
    }
    @end
    main.m
    Person *p = [[Person alloc]init];
    p ->_name = @"Bobby";

    //調(diào)用_age 的setter方法
    [p setAge:18];
    //調(diào)用_sex的setter方法
    [p setSex:@"男"];

    //調(diào)用_age的getter方法
    NSInteger pAge = [p age];
    //這兩種都可以
    NSLog(@"年齡:%ld",pAge);
    NSLog(@"年齡是:%ld",[p age]);
    //調(diào)用_sex的getter方法
    NSString *pSex = [p sex];
    NSLog(@"性別是:%@",pSex);
    NSLog(@"性別是:%@",[p sex]);
    // p ->_clour = @"黃種人”; errorS璧2!
    [p setClour:@"綠色"];
    NSLog(@"%@",[p clour]);```

3券册、 總結(jié)三種實(shí)例變量的可見度

系統(tǒng)默認(rèn)的實(shí)例變量可見度修飾符:@protected

@public 修飾的實(shí)例變量雖然可以在類的內(nèi)部直接訪問频轿,但是它破壞了類的封裝思想垂涯,所以以后祥哥建議不要使用

4、點(diǎn)語法:

1》點(diǎn)語法后面有賦值運(yùn)算符(=)的時(shí)候調(diào)用的是實(shí)例變量的 setter 方法航邢,后面沒有賦值運(yùn)算符(=)的時(shí)候用的是實(shí)例變量的getter 方法耕赘;

2》點(diǎn)語法知識(shí)系統(tǒng)提供一種快速調(diào)用setter 和getter 方法的快捷方式,只有寫了實(shí)例變量的 settergetter 方法才能使用點(diǎn)語法膳殷;

//Student.h
@interface Student : NSObject
//實(shí)例變量
{
    NSString *_name;//名字
    NSString *_sex;//性別
    NSString *_clour;//膚色
    NSInteger _age;//年齡
    CGFloat _weight;//體重   可以設(shè)置只寫的
//    @private
    NSInteger _number;//學(xué)號(hào)  可以設(shè)置只讀的
}
//重寫父類的init方法
- (id)init;
//由于學(xué)號(hào)不允許學(xué)生修改操骡,此時(shí)值提供getter 方法
- (NSInteger)number;
//由于體重是學(xué)生的密碼,此時(shí)只提供setter方法
- (void)setWeight:(CGFloat)weight;
Student.m
//由于學(xué)號(hào)不允許學(xué)生修改秽之,此時(shí)值提供getter 方法
- (NSInteger)number
{
    return _number;
}
//由于體重是學(xué)生的密碼当娱,此時(shí)只提供setter方法
- (void)setWeight:(CGFloat)weight
{
    _weight =weight;
}
//main.m
 NSLog(@"%ld ",stu.number); 
    stu.weight =  50.0;

5吃既、類方法: 類方法的好處和使用場合:不依賴于對象考榨,執(zhí)行效率高,能使用類方法解決的問題盡量使用類方法鹦倚;

//場合:當(dāng)方法內(nèi)不需要使用實(shí)際變量的時(shí)候河质,可以改為類方法;
//Calculator.h
@interface Calculator : NSObject
//計(jì)算兩個(gè)數(shù)的和
+ (CGFloat)oneNumber : (CGFloat)number plusOtherNumber : (CGFloat)OtherNumber;
//計(jì)算兩個(gè)數(shù)的和
- (CGFloat)oneNumber : (CGFloat)number plusOtherNumber : (CGFloat)OtherNumber;
@end
//Calculator.m
@implementation Calculator
//計(jì)算兩個(gè)數(shù)的和
+ (CGFloat)oneNumber : (CGFloat)number plusOtherNumber : (CGFloat)OtherNumber{
    return number +OtherNumber;
}
//計(jì)算兩個(gè)數(shù)的和
- (CGFloat)oneNumber : (CGFloat)number plusOtherNumber : (CGFloat)OtherNumber{
    return number +OtherNumber;
}
@end
//main.m
//調(diào)用計(jì)算器類的方法
   CGFloat result = [Calculator oneNumber:34.0 plusOtherNumber:56.0];
    NSLog(@"%.2lf",result);
    //調(diào)用計(jì)算器的對象方法
    Calculator *cal = [[Calculator alloc]init];
    result = [cal oneNumber:50.0 plusOtherNumber:50.0];
    NSLog(@"%.2lf",result);```


###6震叙、自定義初始化條件 


######好處:把初始化和對實(shí)例變量的賦值結(jié)合在一起

//Boy.h
@interface Boy : NSObject
{ NSString *_name;//名字
NSString *_gender;//性別
NSInteger _age;//年齡
CGFloat _height;//身高}
//重寫隱匿的方法

  • (id)init;
    //自定義初始化方法和格式
  • (id)initWithName : (NSString *)name;
    //完全初始化方法
    //遵循小駝峰命名法
  • (id)initWithName:(NSString *)name
    gender : (NSString *)gender
    age : (NSInteger)age
    height : (CGFloat)height;
  • (void)setName : (NSString *)name;
  • (NSString *)name;
  • (void)setGender : (NSString *)gender;
  • (NSString *)gender;
  • (void)setAge : (NSInteger)age;
  • (NSInteger)age;
  • (void)setHeight : (CGFloat)height;
  • (CGFloat)height;
    @end

//Boy.m
@implementation Boy

  • (id)init{
    _name = @"標(biāo)哥";
    _gender = @"純爺們";
    _height = 180;
    return self;
    }

  • (id)initWithName:(NSString *)name
    gender : (NSString *)gender
    age : (NSInteger)age
    height : (CGFloat)height{
    //使用方法中的參數(shù)給實(shí)例變量賦值
    _name = name;
    _gender = gender;
    _age = age;
    _height = height;
    return self;
    }

  • (id)initWithName : (NSString *)name{
    _name = name;
    return self;
    }

  • (void)setName : (NSString *)name{
    _name = name;
    }

  • (NSString *)name{
    return _name;
    }

  • (void)setGender : (NSString *)gender{
    _gender = gender;
    }

  • (NSString *)gender{
    return _gender;
    }

  • (void)setAge : (NSInteger)age{
    _age = age;
    }

  • (NSInteger)age{
    return _age;
    }

  • (void)setHeight : (CGFloat)height{
    _height = height;}

  • (CGFloat)height{
    return _height;
    @end
    //main.m
    Boy *b = [[Boy alloc]init];
    NSLog(@"%@ %@ %ld %.2lf",b.name,b.gender,b.age,b.height);
    //部分自定義
    Boy *b1 = [[Boy alloc]initWithName:@"標(biāo)哥"];
    NSLog(@"%@ %@ %ld %.2lf",b1.name,b1.gender,b1.age,b1.height);
    //全部自定義
    Boy *b2 = [[Boy alloc]initWithName:@"標(biāo)哥哥" gender:@"男" age:23 height:180];
    NSLog(@"%@ %@ %ld %.2lf",b2.name,b2.gender,b2.age,b2.height);```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掀鹅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子媒楼,更是在濱河造成了極大的恐慌乐尊,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件划址,死亡現(xiàn)場離奇詭異扔嵌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)夺颤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門痢缎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人世澜,你說我怎么就攤上這事独旷。” “怎么了寥裂?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵嵌洼,是天一觀的道長。 經(jīng)常有香客問我封恰,道長麻养,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任俭驮,我火速辦了婚禮回溺,結(jié)果婚禮上春贸,老公的妹妹穿的比我還像新娘。我一直安慰自己遗遵,他們只是感情好萍恕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著车要,像睡著了一般允粤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翼岁,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天类垫,我揣著相機(jī)與錄音,去河邊找鬼琅坡。 笑死悉患,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的榆俺。 我是一名探鬼主播售躁,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼茴晋!你這毒婦竟也來了陪捷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤诺擅,失蹤者是張志新(化名)和其女友劉穎市袖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烁涌,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苍碟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烹玉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驰怎。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖二打,靈堂內(nèi)的尸體忽然破棺而出县忌,到底是詐尸還是另有隱情,我是刑警寧澤继效,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布症杏,位于F島的核電站,受9級特大地震影響瑞信,放射性物質(zhì)發(fā)生泄漏厉颤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一凡简、第九天 我趴在偏房一處隱蔽的房頂上張望逼友。 院中可真熱鬧精肃,春花似錦、人聲如沸帜乞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽黎烈。三九已至习柠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間照棋,已是汗流浹背资溃。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烈炭,地道東北人溶锭。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像梳庆,于是被迫代替她去往敵國和親暖途。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 學(xué)習(xí)目標(biāo) 1.【了解】異常處理 2.【掌握】類方法 3.【掌握】NSString類 4.【掌握】匿名對象 5.【掌...
    Hm丶閱讀 948評論 0 1
  • 重點(diǎn)掌握 3 類對象和方法 對象就是一個(gè)物體 類的獨(dú)特存在就是一個(gè)實(shí)例膏执,對實(shí)例進(jìn)行操作叫做方法。方法可以應(yīng)用于類或...
    Coder大雄閱讀 1,258評論 0 2
  • 第一個(gè)層次露久,處理自己與自己的關(guān)系更米,比如認(rèn)清自己,提高自己毫痕,兵法自己征峦,謀略自己,有時(shí)需要逼一下自己消请; 最重要的是自己...
    眾心無相閱讀 1,887評論 0 1
  • 你有沒有這樣一種感受栏笆,某個(gè)時(shí)刻某個(gè)瞬間忽然就想記錄一些什么‰或是困頓的人際關(guān)系蛉加,或是迷茫的青春年華? 上大學(xué)前缸逃,我...
    Euteamo閱讀 257評論 0 0
  • 《禪與摩托車維修藝術(shù)》書中苞七,父子二人騎著摩托車藐守,一路跨越美國各地,結(jié)合自身的經(jīng)歷蹂风,感悟了思維觀吗伤、認(rèn)識(shí)論等一系列的哲...
    Jun哥筆記閱讀 603評論 0 0