iOS學習——weak的應用情境

來源:互聯網
上載者:User

標籤:物理層   執行   ati   ini   操作   學習   ima   nsurl   tom   

  OC採用ARC機制,因此strong等屬性也有了應用情境。當使用alloc為一個對象在堆中分配記憶體空間,然後讓棧區使用一個強指標指向該記憶體位址,就能在指標被自動釋放簽前,保證堆內資料不被釋放。那麼如果不是用強指標,而是用弱指標執行該堆記憶體位址,那麼在分配記憶體空間後就會自動釋放。

  那麼,針對這種運用情境就有一個不同的指標屬性。

@property (nonatomic, strong) UIScrollView *scrollView;@property (nonatomic, weak) UIImageView *imgView;@end@implementation ViewController
- (void)loadView {    self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];    self.view = self.scrollView;    //網路資料都是二進位    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://mpic.tiankong.com/bf0/7f9/bf07f9842b76981cc2cae5d8850bbeaf/640.jpg"]];    UIImage *image = [UIImage imageWithData:data];    UIImageView *imgView = [[UIImageView alloc] initWithImage:image];    self.imgView = imgView;    [self.scrollView addSubview:self.imgView];    [self.imgView sizeToFit];}

 


  在這裡我做了幾件事,一是在使用loadView將self的view改為scrollView,loadView調用的時候,系統將不再讀取SB/Xib檔案,所以即便你在xib上做了什麼,只要使用loadView就能完全覆蓋。二是建立了一個弱指標_imgView。在這裡,如果將scrollView的strong改成weak,那麼你將在執行[self.view addSubview:imgView];的時候代碼崩潰,崩潰的原因顯而易見,self.view等於nil,因為self.scrollview是弱指標,[[UIScrollView alloc] initWithFrame:self.view.bounds]建立完後就被釋放掉了。但是imgView聲明為弱指標卻完全沒有問題,那是因為在將imgView賦值給self.imgView前,做了[self.view addSubview:imgView],imgView添加到了self.view.subViews這個數組中,查看源碼可以發現,subViews也是一個強指標,它指向了imgView這塊記憶體,所以再次使用self.imgView這個弱指標指向該記憶體時,記憶體也不會被釋放了。用弱指標指向imgVie更帶來了一個好處,如果執行刪除操作,一般採用removeFromSuperView,即將imgView從subViews中移除,如果self.imgView是強指標,雖然介面上看不到了,但是imgView分配在堆中的記憶體依然沒有被釋放,而弱指標指向,在執行remove後就立刻清理掉了這塊堆記憶體。
  ps:網路資料都是二進位——網路資料轉送到物理層,而網線使用電流進行傳輸,電流的高低電頻就表示了二進位。
 

 

iOS學習——weak的應用情境

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.