對于KVC可以更改私有屬性的一些補充

闡述:

對于KVC可以更改私有屬性的一些補充;
在前面一篇文章中,我有介紹過通過KVC可以更改系統(tǒng)里面屬性的權(quán)限的問題,但說得不全面,很多地方也就一筆帶過了, 今天在這里,我做一些補充,具體的來演示一下,KVC是怎樣來更改權(quán)限的;
上一篇文章鏈接:
你所不知道的UITabBarButton?

正文:

我們直接來驗證一下KVC可以更改私有屬性;
看代碼:
首先我先創(chuàng)建一個類,在類里面我定義一個私有的成員變量:

Person.h文件:

#import <Foundation/Foundation.h>
@interface Person : NSObject{
// 定義一個私有屬性
@private
    int _age;
}
// 非私有屬性
@property (nonatomic,copy) NSString *name;
// 定義一個方法
-(void)showMessage;

@end

Person.m文件:

#import "Person.h"
@implementation Person
// 實現(xiàn)方法, 輸出名字和年齡
-(void)showMessage{
    NSLog(@"name=%@,age=%d",_name,_age);
}
@end

根據(jù)這個創(chuàng)建的分類,我們可以得知,如果我們用平時的方法,是沒有辦法訪問到age的, 因為,我這里把age定位就是私有屬性, 那么就下來,我就是要訪問它,怎么辦呢? 對,估計你也想到了, 我要用KVC來訪問, 大家看好我接下來的操作:

//1.首先我現(xiàn)在在控制器類中,初始化一個Person對象,

//  ViewController.m

#import "ViewController.h"
#import "Person.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
// 1. 先初始化一個person對象
    Person *person1=[[Person alloc]init];
}

// 2. 由于name屬性是公開的,所以,我先用KVC直接給name屬性賦值, 相信這點大家都能看明白;

- (void)viewDidLoad {
    [super viewDidLoad];
// 1. 先初始化一個person對象
    Person *person1=[[Person alloc]init];
// 2. 由于name屬性是公開的,所以,我先用KVC直接給name屬性賦值, 相信這點大家都能看明白;
    [person1 setValue:@"Kenshin" forKey:@"name"];

// 3. 接下來,我就要給私有的age賦值了,按理說,我們是訪問不了私有屬性的, 但是KVC就是這么神奇,它可以訪問;

- (void)viewDidLoad {
    [super viewDidLoad];
// 1. 先初始化一個person對象
    Person *person1=[[Person alloc]init];
// 2. 由于name屬性是公開的,所以,我先用KVC直接給name屬性賦值, 相信這點大家都能看明白;
    [person1 setValue:@"Kenshin" forKey:@"name"];

 // 3. 注意即使一個私有變量仍然可以訪問
    [person1 setValue:@28 forKey:@"age"];

// 4. 接下來我們調(diào)用person類中的方法,輸出結(jié)果查看一下,我們訪問到私有屬性age是否已經(jīng)被我們通過KVC的方法賦值成功了呢:

- (void)viewDidLoad {
    [super viewDidLoad];
// 1. 先初始化一個person對象
    Person *person1=[[Person alloc]init];
// 2. 由于name屬性是公開的,所以,我先用KVC直接給name屬性賦值, 相信這點大家都能看明白;
    [person1 setValue:@"Kenshin" forKey:@"name"];
 // 3. 注意即使一個私有變量仍然可以訪問
    [person1 setValue:@28 forKey:@"age"];

// 4. 調(diào)用方法 輸出結(jié)果
    [person1 showMessage];
}

測試結(jié)果:

13:34:23.853 KVC[2786:367096] name=Kenshin,age=28

通過結(jié)果可以看出, 我們用KVC不僅可以給公開的變量賦值:name=Kenshin, 同樣可以給私有的變量賦值,age=28,訪問私有變量完全是沒有問題的,

那KVC既然可以給私有變量賦值, 我們是不是就可以肆無忌憚的使用這種方式來串改蘋果系統(tǒng)規(guī)定過的私有變量或者只讀權(quán)限呢?

當然不是了, 蘋果系統(tǒng)底層既然已經(jīng)規(guī)定了每個屬性的權(quán)限,那么肯定是由他的道理的, KVC雖然具有這個功能, 但不是說我們可以隨意改, 因為,在app上架前審核的過程中,蘋果官方是會對這類做法嚴格檢查的, 如果有發(fā)現(xiàn),你的審核是通過不了的;
那既然是這樣,蘋果為什么又要提供KVC的方式呢? 因為在蘋果看來,KVC的方式是一種非常高效的手段, 一句代碼即可解決很多繁瑣的工作量, 既優(yōu)美,又簡潔方便, 雖然蘋果提供了這個KVC的方法, 但是他們并不是讓我們隨意可以更改系統(tǒng)的權(quán)限的, 因為,如果隨意的更改系統(tǒng)權(quán)限,是會有可能引發(fā)嚴重的信息安全風險的, 這也就是我們常說的"使用不當"的意思;

但是,如果,我們僅僅是去修改我們自定義的類里面的私有屬性和權(quán)限,這個是沒什么大問題的,所以,對于前面的那篇文中提到的修改系統(tǒng)底層的tabBar的readonly權(quán)限,我們也要做相應的其他設置, 最好的方式還是用代理來實現(xiàn)對tabBar的自定義, 具體的實現(xiàn),我后期有時間會給大家做一個分享了, 今天就指討論KVC可以更改私有屬性的問題;

如有不妥的地方,望大家斧正!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市态辛,隨后出現(xiàn)的幾起案子麸澜,更是在濱河造成了極大的恐慌,老刑警劉巖奏黑,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炊邦,死亡現(xiàn)場離奇詭異编矾,居然都是意外死亡,警方通過查閱死者的電腦和手機铣耘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門洽沟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜗细,你說我怎么就攤上這事∨辏” “怎么了炉媒?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長昆烁。 經(jīng)常有香客問我吊骤,道長,這世上最難降的妖魔是什么静尼? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任白粉,我火速辦了婚禮,結(jié)果婚禮上鼠渺,老公的妹妹穿的比我還像新娘鸭巴。我一直安慰自己,他們只是感情好拦盹,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布鹃祖。 她就那樣靜靜地躺著,像睡著了一般普舆。 火紅的嫁衣襯著肌膚如雪恬口。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天沼侣,我揣著相機與錄音祖能,去河邊找鬼站玄。 笑死四敞,一個胖子當著我的面吹牛亿乳,可吹牛的內(nèi)容都是我干的挥转。 我是一名探鬼主播沽损,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼鸽凶,長吁一口氣:“原來是場噩夢啊……” “哼李剖!你這毒婦竟也來了救崔?” 一聲冷哼從身側(cè)響起扶供,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤筛圆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后椿浓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體太援,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡闽晦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了提岔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仙蛉。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碱蒙,靈堂內(nèi)的尸體忽然破棺而出荠瘪,到底是詐尸還是另有隱情,我是刑警寧澤赛惩,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布哀墓,位于F島的核電站,受9級特大地震影響喷兼,放射性物質(zhì)發(fā)生泄漏篮绰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一季惯、第九天 我趴在偏房一處隱蔽的房頂上張望吠各。 院中可真熱鬧,春花似錦勉抓、人聲如沸贾漏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磕瓷。三九已至,卻和暖如春念逞,著一層夾襖步出監(jiān)牢的瞬間困食,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工翎承, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留硕盹,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓叨咖,卻偏偏與公主長得像瘩例,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子甸各,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

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

  • 轉(zhuǎn)自:http://www.reibang.com/p/dd355fbfa029kvc不經(jīng)常使用垛贤,可能會忘記。轉(zhuǎn)載...
    BetterComingDay閱讀 651評論 0 1
  • KVC(Key-value coding)鍵值編碼趣倾,單看這個名字可能不太好理解聘惦。其實翻譯一下就很簡單了,就是指iO...
    黑暗中的孤影閱讀 49,721評論 74 441
  • 重點掌握 3 類對象和方法 對象就是一個物體 類的獨特存在就是一個實例儒恋,對實例進行操作叫做方法善绎。方法可以應用于類或...
    Coder大雄閱讀 1,258評論 0 2
  • 原本想睡個懶覺的黔漂,弟弟8點要趕到學校考試禀酱。我得負責任的叫他起來以免遲到炬守!那就索性我也早起吧!想著本周還有一篇文章沒...
    Lady_Lydia閱讀 197評論 1 1
  • 靜坐的老人吶 在無邊的悠閑時光 劃亮一根火柴 點燃一卷紙煙兒 拿到嘴邊 咂巴咂巴 安逸地吸一口 慢慢 吐出云霧 有...
    夏霖捷閱讀 118評論 0 0