一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - IOS - iOS 對象屬性詳細(xì)介紹

iOS 對象屬性詳細(xì)介紹

2021-02-07 18:53iOS開發(fā)網(wǎng) IOS

這篇文章主要介紹了iOS 對象屬性詳細(xì)介紹的相關(guān)資料,這里整理了IOS 對象的相關(guān)資料,需要的朋友可以參考下

iOS 對象屬性

oc對象的一些屬性:

retain,strong, copy,weak,assign,readonly, readwrite, unsafe_unretained

下面來分別講講各自的作用和區(qū)別:

retain,計數(shù)器加1, (增加一個指向內(nèi)存的指針) 對應(yīng)release(計數(shù)器-1) setter 方法對參數(shù)進(jìn)行 release 舊值再 retain 新值,所有實現(xiàn)都是這個順序

?
1
2
3
4
5
6
7
8
9
10
11
- (void)setBackView:(UIView *)backView {
 
  if (_backView != backView) {
 
    [_backView release];
 
    _backView = [backView retain];
  }
 
  return _backView;
}

copy, 拷貝,新開地址,內(nèi)容拷貝, setter 方法進(jìn)行 Copy 操作,與 retain 處理流程一樣,先舊值 release ,再 Copy 出新的對象, retainCount 為 1 。這是為了減少對上下文的依賴而引入的機(jī)制。

(提一點深拷貝shallow copy,淺拷貝deep copy)

這篇文章比較直觀(http://blog.csdn.net/omegayy/article/details/7311839)

官方文檔(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Collections/Articles/Copying.html)

copy和mutableCopy調(diào)用后表現(xiàn)的行為到底是什么樣完成取決于類本身NSCopying和NSMutableCopying協(xié)議是如何實現(xiàn)的。

 strong, 強引用,計數(shù)器加1,和retain一樣(對應(yīng)retain和copy)

weak,弱引用

?
1
2
3
4
5
6
7
8
9
10
strong 用來修飾強引用的屬性;
 
@property (strong) SomeClass * aObject;
對應(yīng)原來的
@property (retain) SomeClass * aObject; 和 @property (copy) SomeClass * aObject;
 
weak 用來修飾弱引用的屬性;
@property (weak) SomeClass * aObject;
對應(yīng)原來的
@property (assign) SomeClass * aObject;

__weak, __strong 用來修飾變量,此外還有 __unsafe_unretained, __autoreleasing 都是用來修飾變量的。
__strong 是缺省的關(guān)鍵詞。
__weak 聲明了一個可以自動 nil 化的弱引用。
__unsafe_unretained 聲明一個弱應(yīng)用,但是不會自動nil化,也就是說,如果所指向的內(nèi)存區(qū)域被釋放了,這個指針就是一個野指針了。
__autoreleasing 用來修飾一個函數(shù)的參數(shù),這個參數(shù)會在函數(shù)返回的時候被自動釋放。

strong和weak的區(qū)別

(weak和strong)不同的是 當(dāng)一個對象不再有strong類型的指針指向它的時候 它會被釋放  ,即使還有weak型指針指向它。

一旦最后一個strong型指針離去 ,這個對象將被釋放,所有剩余的weak型指針都將被清除。

可能有個例子形容是妥當(dāng)?shù)摹?/p>

想象我們的對象是一條狗,狗想要跑掉(被釋放)。

strong型指針就像是栓住的狗。只要你用牽繩掛住狗,狗就不會跑掉。如果有5個人牽著一條狗(5個strong型指針指向1個對象),除非5個牽繩都脫落 ,否著狗是不會跑掉的。

weak型指針就像是一個小孩指著狗喊到:“看!一只狗在那” 只要狗一直被栓著,小孩就能看到狗,(weak指針)會一直指向它。只要狗的牽繩脫落,狗就會跑掉,不管有多少小孩在看著它。

只要最后一個strong型指針不再指向?qū)ο螅敲磳ο缶蜁会尫牛瑫r所有的weak型指針都將會被清除。

assign,用于簡單類型,計數(shù)器不加,直接賦值,一個指針,一塊地址, setter 方法直接賦值,不進(jìn)行任何 retain 操作,為了解決原類型與環(huán)循引用問題

readonly,只讀,只生成get方法,沒有set方法

readwrite,默認(rèn),可讀寫,set,get方法都會生成

unsafe_unretained,類似weak,所謂的unSafe就是指會容易出現(xiàn)也指針的情況,慎用

setter = xxxx,聲明對象的set方法

getter = xxxx, 聲明對象的get方法

nonatomic,非原子操作,系統(tǒng)不添加代碼,運行速度相對快,但數(shù)據(jù)操作在多線程情況下相對不安全

atomic,原子操作,編譯時會增加很多加鎖解鎖代碼,數(shù)據(jù)操作在多線程情況下相對安全

* 使用assign: 對基礎(chǔ)數(shù)據(jù)類型 (NSInteger)和C數(shù)據(jù)類型(int, float, double, char,等)
* 使用copy: 對NSString
* 使用retain: 對其他NSObject和其子類

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人永久免费视 | 国产农村一一级特黄毛片 | 国产在线观看精品香蕉v区 国产在线观看a | 女女同性做爰xxoo亲吻 | 日本红色高清免费观看 | 青青青草免费 | 四虎最新永久免费网址 | 欧美草逼网站 | 亚洲国产成人久久精品影视 | 亚洲精品123区在线观看 | 欧美日韩精品一区二区三区视频在线 | 日日干影院 | 欧美交换乱理伦片120秒 | 日本日日黄 | 免费黄色网站视频 | 水野朝阳厨房系列在线观看 | 国产色图片 | 美女福利网站 | 欧美交换乱理伦片120秒 | www在线看| 3d欧美人与禽交 | 美女脱一净二净不带胸罩 | 香蕉tv亚洲专区在线观看 | 成 人免费va视频 | 强制高h| 日本中文字幕在线精品 | 好湿好紧太硬了我太爽了h 好湿好滑好硬好爽好深视频 | 精品国产理论在线观看不卡 | 扒开老女人 | 外国老少性配 | 2020最新韩国理论三级0k | 草莓视频在线观看免费 | 99精品在线视频观看 | 久久精品中文騷妇女内射 | 国产精品视频免费观看 | 久久永久免费视频 | 欧美日韩国产亚洲一区二区 | 3d肉浦团在线观看 | 日韩欧美三级视频 | 国产在线欧美日韩精品一区二区 | 青青草在视线频久久 |