1譬挚、readwrite:是可讀可寫特性锅铅,需要生成getter方法和setter方法。
2减宣、readonly:是只讀特性盐须,只會(huì)生成getter方法,不會(huì)生成setter方法漆腌,不希望屬性在類外改變贼邓。
3、retain表示持有特性闷尿,setter方法將傳入?yún)?shù)先保留塑径,再賦值,傳入?yún)?shù)的引用計(jì)數(shù)retaincount會(huì)+1.
4填具、nonatomic非原子性操作统舀,決定編譯器生成的setter、getter方法是否加鎖劳景。
? ??atomit表示多線程安全誉简,一般使用nonatomic。
5枢泰、assign是賦值特性描融,setter方法將傳入?yún)①愘x值給實(shí)例變量,僅設(shè)置變量時(shí)衡蚂,assign用于簡(jiǎn)單數(shù)據(jù)類型窿克,如NSInteger,double毛甲,bool年叮。非OC對(duì)象。
6玻募、weak弱引用只损,在ARC中,在有可能出現(xiàn)循環(huán)引用的時(shí)候七咧,往往要通過(guò)讓其中一端使用weak來(lái)解決跃惫。比如:delegate代理屬性。OC對(duì)象
????weak與assign的不同艾栋?
????weak此特質(zhì)表明該屬性定義了一種“非擁有關(guān)系”為這種屬性設(shè)置新值時(shí)爆存,設(shè)置方法既不保留新值,也不釋放舊值蝗砾。此特質(zhì)同assign類似先较,然而在屬性所指的對(duì)象遭到摧毀時(shí)携冤,屬性值也會(huì)清空。而assign的“設(shè)置方法”只會(huì)執(zhí)行針對(duì)“純量類型”(CGFlot或NSInteger等)的簡(jiǎn)單賦值操作闲勺。
7曾棕、strong強(qiáng)引用
8、copy表示賦值特性菜循,setter方法將傳入?yún)?shù)對(duì)象賦值一份翘地,需要完全一份新的變量時(shí)。
????copy修飾NSMutableArray時(shí):@property (nonatomic, copy) NSMutableArray *arr;
????[XXXXXX copy];生成的對(duì)象都是不可變的债朵;
????[XXXXXX mutableCopy];生成的對(duì)象是可變的子眶;
????NSMutableArray *arr = [NSMutableArray array];
????arr = [arr copy]; arr是不可變的
????解釋:深賦值、淺賦值
????????深賦值:內(nèi)容賦值序芦,會(huì)產(chǎn)生新對(duì)象,新對(duì)象引用指數(shù)+1
????淺賦值:指針賦值粤咪,不會(huì)產(chǎn)生新對(duì)象谚中,原對(duì)象的引用指數(shù)+1
????注意:不可變對(duì)象用copy修飾時(shí)是淺賦值,剩下其他都是深復(fù)制寥枝。
????因?yàn)槭褂玫氖莄opy宪塔,所得到的實(shí)際上是NSArray類型,它是不可變的囊拜,若在使用中使用了增某筐、刪、改操作冠跷,則會(huì)crash南誊。
9、_block/_weak修飾符區(qū)別:
_block在ARC和MRC環(huán)境下都能用蜜托,可以修飾對(duì)象抄囚,也能修飾基本數(shù)據(jù)類型
_weak只能在ARC環(huán)境下使用,只能修飾對(duì)象(NSString)橄务,不能修飾基本數(shù)據(jù)類型(int)
_block對(duì)象可以在block中重新賦值幔托,_weak不行。
10蜂挪、NSString的時(shí)候用copy和strong的區(qū)別:
????OC中NSString為不可變字符串的時(shí)候重挑,用copy和strong都是只分配一次內(nèi)存,但是如果用copy的時(shí)候棠涮,需要先判斷字符串是否是不可變字符串谬哀,如果是不可變字符串,就不再分配空間故爵,如果是可變字符串才分配空間玻粪。如果程序中用到NSString的地方特別多隅津,每一次都要先進(jìn)行判斷就會(huì)耗費(fèi)性能,影響用戶體驗(yàn)劲室,用strong就不會(huì)再進(jìn)行判斷伦仍,所以,不可變字符串可以直接用strong很洋。