__weak弱引用並不持有物件,所以賦值給__weak修飾符的變數也不會改變計數器的值.
main.m
id__strongobj3 = nil;
id__weak obj1= nil;
/*id __weak obj1 = obj;
編譯器的模擬**例如以下:
id obj1;
objc_iniitweak(&obj1,obj);
objc_destroyweak(&obj1);
*/@autoreleasepool
nslog
(@"obj3 retaincount = %ld",
cfgetretaincount
((__bridge
cftyperef
)(obj3)));
nslog
(@"obj1 retaincount = %ld",
cfgetretaincount
((__bridge
cftyperef
)(obj1)));
nslog(@"%d",_objc_autoreleasepoolprint());
/*列印例如以下:
objc[1029]: ##############
objc[1029]: autorelease pools for thread 0x7fff7455a300
objc[1029]: 1 releases pending.
objc[1029]: [0x101001000] ................ page (hot) (cold)
objc[1029]: [0x101001038] ################ pool 0x101001038
objc[1029]: ##############
2015-07-24 23:02:39.686 objective-c物件與core foundation物件[1029:100223] 139077936
2015-07-24 23:02:39.687 objective-c物件與core foundation物件[1029:100223] obj retaincount = 2 -------->>>>>>>(1)
2015-07-24 23:02:39.688 objective-c物件與core foundation物件[1029:100223] obj1 retaincount = 3
-------->>>>>>>(2)
2015-07-24 23:02:39.688 objective-c物件與core foundation物件[1029:100223] obj3 retaincount = 2
-------->>>>>>>(1)
2015-07-24 23:02:39.688 objective-c物件與core foundation物件[1029:100223] obj3 retaincount = 1
-------->>>>>>>(3)
2015-07-24 23:02:39.688 objective-c物件與core foundation物件[1029:100223] obj1 retaincount = 2
-------->>>>>>>(4)
objc[1029]: ##############
objc[1029]: autorelease pools for thread 0x7fff7455a300
objc[1029]: 0 releases pending.
objc[1029]: [0x101001000] ................ page (hot) (cold)
objc[1029]: ##############
2015-07-24 23:02:39.688 objective-c物件與core foundation物件[1029:100223] 139077936
*//*1:由上面(1)可知__weak修飾符修飾的變數並不會持有物件
2:由(3)可知當__strong修飾的變數超出了作用域時,不在持有物件,導致reraincout - 1;
3:細心的讀者或許已經發現 obj1的retaincount和obj的不一樣呢?(這也是筆者最大的疑惑)
以下介紹筆者的思考過程
(1)__weak修飾的變數儘管是對物件的弱引用,他不改變賦值物件(obj)的引用計數(retaincount),但自身的retaincount會新增. -------->>> 但是他們是指向同乙個位址的,為何retaincount不一樣呢?所以這條路不通
(2)儘管他們是同乙個位址,但__weak不持有物件,但__weak修飾的變數想使用物件就必須使retaincount + 1,但同一時候並不改變物件的retaincount.帶著這個疑問最後讓我找到了答案 -->>在通過__weak指標尋找物件的時候,它有乙個修飾詞,當使用他的時候就會使返回的retaincount + 1(注意這裡並非retaincount本身).
4:持不持有乙個物件,
是看它是否導致物件的retaincount + 1;而不是看他是否指向那個位址.
*/
SpringBoot碰到的疑問或問題
1 responsebody 和 requestbody 的區別 requestbody是作用在形參列表上,用於將前台傳送過來固定格式的資料 xml 格式或者 json等 封裝為對應的 j abean 物件,封裝時使用到的乙個物件是系統預設配置的 httpmessageconverter進行解析,然...
iOS weak的底層實現
weak底層千千萬,吾竟裝作看不見.weak基本用法 weak是弱引用,用weak描述修飾或者所引用物件的計數器不會加一,並且會在引用的物件被釋放的時候自動被設定為nil,大大避免了野指標訪問壞記憶體引起崩潰的情況,另外weak還可以用於解決迴圈引用。weak原理概括 weak表其實是乙個hash ...
學習freeswitch碰到的問題
1.通話單聲道問題 2.fs集群問題 3.fs之間引數傳遞格式 sip h x 4.節點的配置錯誤,導致軟話機撥打 沒有鈴聲 5.originate慢的問題 使用bgapi 6.調查軟話機使用自動模式註冊,不能給掉起來的原因 7.為什麼沒有產生錄音檔案 8.上傳的錄音檔案為空 fs沒有實時把語音流存...