oc屬性關(guān)鍵字整理

看面試題的經(jīng)澄獬看到一些關(guān)于關(guān)鍵字的問題,在oc中修飾一個屬性一般有4種關(guān)鍵詞

原子性--- atomic/nonatomic沫浆。(默認atomic) atomic在setter/getter方法里加了鎖眠冈,多線程情況下,一個線程進行setter操作贩猎,另外一個線程就需要等待上一個線程setter操作完畢才能操作。避免多線程下同時對一個屬性進行setter或者getter操作造成數(shù)據(jù)混亂瓤球。但是可以一個線程進行setter另外一個線程進行g(shù)etter操作融欧,還是會造成數(shù)據(jù)混亂,并不能真正的保證線程安全卦羡,比如下面的代碼

@property (atomic, assign) int leftTicketCount;

self.leftTicketCount = 50;
self.thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTicket) object:nil];
self.thread1.name = @"1號窗口";

self.thread2 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTicket) object:nil];
self.thread2.name = @"2號窗口";

self.thread3 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTicket) object:nil];
self.thread3.name = @"3號窗口";

[self.thread1 start];
[self.thread2 start];
[self.thread3 start];
- (void)saleTicket
{

   while (1) {
       NSUInteger count = self.leftTicketCount;
       if (count > 0) {
           self.leftTicketCount = count - 1;
           NSLog(@"%@賣了一張票, 剩余%zd張票", [NSThread currentThread].name, self.leftTicketCount);
       } else {
           return; // 退出循環(huán)
       }
   }
}
2017-06-21 12:38:45.727 [14137:733573] 1號窗口賣了一張票, 剩余32張票
2017-06-21 12:38:45.727 [14137:733574] 2號窗口賣了一張票, 剩余31張票
2017-06-21 12:38:45.832 [14137:733573] 1號窗口賣了一張票, 剩余29張票
2017-06-21 12:38:45.832 [14137:733575] 3號窗口賣了一張票, 剩余30張票

atomic并不能保證線程安全噪馏,只是保證了setter/getter的操作安全(同一時間多條線程不能同時操作setter或者getter)。想要安全還得加鎖绿饵。

- (void)saleTicket
{

    while (1) {

        @synchronized(self) { // 開始加鎖
            NSUInteger count = self.leftTicketCount;
            if (count > 0) {
                self.leftTicketCount = count - 1;
                NSLog(@"%@賣了一張票, 剩余%zd張票", [NSThread currentThread].name, self.leftTicketCount);
            } else {
                return; // 退出循環(huán)
            }
        } // 解鎖
    }
}

讀/寫權(quán)限(默認readwrite)---readwrite(讀寫)欠肾、readonly (只讀)
但是readonly真的就不能被外界修改了嗎? 沒有什么是KVC不能修改的
內(nèi)存管理語義---assign拟赊、strong刺桃、 weak、unsafe_unretained吸祟、copy

assign:適用于非OC對象瑟慈,比較說一些基本數(shù)據(jù)類型
strong:適用于OC對象桃移,需要對屬性進行強引用
weak:適用于OC對象,弱引用葛碧,強調(diào)“非擁有”的關(guān)系借杰,比如delegate屬性
copy:copy修飾的屬性的值是不可變的,相當于值引用进泼,strong相當于地址引用蔗衡。
   用copy修飾一個屬性
   @property (nonatomic , copy) NSArray *array;

    //執(zhí)行下面代碼
    NSArray *tempArr = @[ @1, @2, @3, @4 ];
    NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:tempArr];
    self.array = mutableArray;
    [mutableArray removeAllObjects];;
    NSLog(@"%@,%@",self.array,mutableArray);

輸出

2017-06-21 13:54:58.765 循環(huán)引用[14684:849540] (
    1,
    2,
    3,
    4
),(
)
將array的copy修飾詞改成strong,打印結(jié)果如下
2017-06-21 13:54:58.765 循環(huán)引用[14684:849540] (
),(
)

strong會引用mutableArray的地址給array乳绕,mutableArray釋
放了绞惦,array也就釋放了,但是copy是拷貝的值洋措。

copy修飾的可變類型的屬性济蝉,底層都會變成不可變類型

@property (nonatomic , copy) NSMutableArray *mutableArray;

執(zhí)行下面代碼:
self.mutableArray = [NSMutableArray arrayWithObjects:@3,@2,nil];
    [self.mutableArray removeObjectAtIndex:0];
直接報錯
erminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance 0x60000023e180'
__NSArrayI表示self.mutableArray是不可變數(shù)組。

方法名---getter=<name> 呻纹、setter=<name> 起別名

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堆生,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雷酪,更是在濱河造成了極大的恐慌淑仆,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哥力,死亡現(xiàn)場離奇詭異蔗怠,居然都是意外死亡,警方通過查閱死者的電腦和手機吩跋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門寞射,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锌钮,你說我怎么就攤上這事桥温。” “怎么了梁丘?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵侵浸,是天一觀的道長。 經(jīng)常有香客問我氛谜,道長掏觉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任值漫,我火速辦了婚禮澳腹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己酱塔,他們只是感情好沥邻,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著延旧,像睡著了一般谋国。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上迁沫,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天,我揣著相機與錄音捌蚊,去河邊找鬼集畅。 笑死,一個胖子當著我的面吹牛缅糟,可吹牛的內(nèi)容都是我干的挺智。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼窗宦,長吁一口氣:“原來是場噩夢啊……” “哼赦颇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赴涵,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤媒怯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后髓窜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扇苞,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年寄纵,在試婚紗的時候發(fā)現(xiàn)自己被綠了鳖敷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡程拭,死狀恐怖定踱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情恃鞋,我是刑警寧澤崖媚,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站山宾,受9級特大地震影響至扰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜资锰,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一敢课、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦直秆、人聲如沸濒募。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瑰剃。三九已至,卻和暖如春筝野,著一層夾襖步出監(jiān)牢的瞬間晌姚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工歇竟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挥唠,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓焕议,卻偏偏與公主長得像宝磨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盅安,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

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

  • 307唤锉、setValue:forKey和setObject:forKey的區(qū)別是什么? 答:1, setObjec...
    AlanGe閱讀 1,554評論 0 1
  • 1.什么情況使用關(guān)鍵字copy? 相比 assign 有什么不同壁肋? (1).在 ARC 中,在有可能出現(xiàn)循環(huán)引用的...
    愛賺錢的依米閱讀 2,037評論 0 22
  • 參考網(wǎng)站:https://github.com/ElemeFE/node-interview/tree/maste...
    大餅臉me閱讀 161評論 0 0
  • 老四一臉不情愿地走在送葬的隊伍前頭籽慢。 這場葬禮聲勢浩大浸遗,做得一絲不茍。負責哭的哭得很盡責箱亿,負責吹嗩吶的也很賣力跛锌,棺...
    93322f9fc77f閱讀 983評論 43 55
  • 一、什么是閱讀呢届惋,簡單的說就是看書髓帽,看紙質(zhì)的書,而不是電子書脑豹,可能有很多人也很喜歡看電子書郑藏,但我本人卻很不喜歡〈衿郏看...
    MR石閱讀 853評論 2 50