1. 程式人生 > >iOS block程式碼塊強引用問題

iOS block程式碼塊強引用問題

block程式碼塊在iOS開發中經常見到,例如AFN資料請求就是block,值得注意的是在block中不恰當的操作程式碼,會導致資源不被釋放,導致記憶體洩漏,例如下面的資料請求:

__weak typeof(self) weakSelf = self;
[SWHttpTool POST:setAvatarPath parameters:parameter success:^(id responseObject) {

        [weakSelf.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]]
withRowAnimation:UITableViewRowAnimationAutomatic]; // 通知我的頁面更改使用者頭像 [[NSNotificationCenter defaultCenter] postNotificationName:@"SWUserInfoUpLoadIcon" object:nil]; } failure:^(NSError *error) { }];

在請求成功的程式碼塊中呼叫了 [weakSelf.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]]方法,注意用的是weakSelf而不是self,用弱指標去操作self,這樣的話,就不會導致block強引用的問題。如果用的是self的話,就是在block中強指標引用控制器,控制器(self)又強引用block,這樣的話會導致死迴圈引用,誰也不會被釋放,當控制器POP掉的時候也不會被釋放,因此導致記憶體洩漏,所以在使用block的時候,一定要注意強指標的使用。

如果要檢視控制器釋放被釋放掉,可以重寫dealloc方法,在方法中做一下測試就可以了。

- (void)dealloc{
    NSLog(@"%s",__func__);
}

dealloc方法是在控制器被銷燬的時候呼叫的,可以用來測試控制器是否被銷燬。

相關推薦

iOS block程式碼引用問題

block程式碼塊在iOS開發中經常見到,例如AFN資料請求就是block,值得注意的是在block中不恰當的操作程式碼,會導致資源不被釋放,導致記憶體洩漏,例如下面的資料請求: __weak typeof(self) weakSelf = self; [

IOS學習之block程式碼

前言:    block這個名詞對於做一般開發者來說可能會覺得稀奇古怪而非常陌生,但是對於iOS工程師來說,在整個開發中到處都是它的影子,今天一大早覺得在假期學習一下它,對明年的iOS開發工作做個準備,突然有點找回當年即將畢業時的最後一個春節假期的感覺,今天基於最近使用的角

iOSBlock程式碼的定義及使用

不會使用Block的iOS程式設計師,不是一個合格的程式設計師 Block沒有你想象中的那麼難,不要害怕,不要畏懼,勇敢嘗試 Block進階: Block其實就是一個程式碼塊,把你想要執行的程式碼封裝在這個程式碼塊裡,等到需要的時候再去呼叫。 個人覺得

Markdown操作——程式碼內如何新增程式碼+如何引用程式碼符號

這是個數學公式,但是想打出原始碼(比如說想介紹一下這個程式碼的使用)的時候卻不知道該怎麼操作了。 其實有的人想到了,直接在外面再加上“```”,那就可以了吧。 備註:csdn的編輯器有問題,無法輸入5個"`"之後在第4與第5個之間打空格,所以這一段可以忽略 這段話還會有

Objective C程式 block程式碼 和property協議及Foundation框架

block程式碼塊 和property協議  1.block型別是一個c級別的語法和執行機制,他與標準c函式類似,不同之處在於,它除了有可執行程式碼以外,還包含了與堆。棧記憶體繫結的變數,因此block 物件包含著一組狀態資料,這些資料在程式執行是用於對行為產生影響,blo

swift基礎學習傳值[屬性傳值、代理、block程式碼、等]

傳值:在此之前我們先定義兩個檢視控制器ViewController ViewController01 1.屬性傳值正向、這裡以字串做例子、其他型別類似:ViewController->>

IOS 程式碼block的宣告、建立、傳參的基本使用

Block 是iOS在4.0之後新增的程式語法,在iOS SDK 4.0之後,block應用幾乎無處不在。 在其他語言中也有類似的概念稱做閉包(closure),比如object C的好兄弟Swift 中閉包(swift 閉包詳解)的使用跟 OC的block一樣

iOS 程式碼(block)的使用

程式碼塊本質上是和其他變數類似。既可以做變數使用,也可以當函式使用。不同的是,程式碼塊儲存的資料是一個函式體。使用程式碼塊是,你可以像呼叫其他標準函式一樣,傳入引數數,並得到返回值。脫字元(^)是塊的語法標記。按照我們熟悉的引數語法規約所定義的返回值以及塊的主體(也就是可

[ios開發基礎之]程式碼 ——block

iOS4引入了一個新特性,支援程式碼塊的使用, 這將從根本上改變你的程式設計方式。程式碼塊是對C語言的一個擴充套件,因此在Objective-C中完全支援。如果你學過Ruby,Python或Lisp程式設計 語言,那麼你肯定知道程式碼塊的強大之處。簡單的說,你可以通

初探iOS中的Block程式碼與閉包)

支援原創,轉載請註明博主與博文連結,3Q   —— by atany 一、Block是什麼?        Block就是一個包含函式體的物件,有時候也被叫做閉包。        概念可能還是有

iOS 程式碼block)使用基礎

       程式碼塊本質上是和其他變數類似。不同的是,程式碼塊儲存的資料是一個函式體。使用程式碼塊是,你可以像呼叫其他標準函式一樣,傳入引數數,並得到返回值。 脫字元(^)是塊的語法標記。按照我們熟悉的引數語法規約所定義的返回值以及塊的主體(也就是可以執行的程式碼)

一篇文章看懂iOS程式碼Block

iOS程式碼塊Block 概述 程式碼塊Block是蘋果在iOS4開始引入的對C語言的擴充套件,用來實現匿名函式的特性,Block是一種特殊的資料型別,其可以正常定義變數、作為引數、作為返回值,特殊地,Block還可以儲存一段程式碼,在需要的時候呼叫,目前Block已經廣泛應用於iOS開發

IOS開發 block程式碼)基本使用

1. block基本概念: (開篇廢話) Block是C級別的語法和執行時特性。Block比較類似C函式,但是Block比之C函式,其靈活性體現在棧記憶體、堆記憶體的引用。 Block是蘋果推薦的型別,效率高,可以幫助我們組織獨立的程式碼段,並提高複用性和

ios xcode 設定程式碼

在Xcode中自定義自己的快速程式碼,很簡單,用起來也很方便 首先選擇自己想要的自定義的程式碼塊 拖拽到紅框的區域鬆手,會彈出設定視窗 這是我的填寫 這裡有另外一個技巧,可以給自己想要改變的地方設定成預留字(預留字是我自己隨口胡鄒的名詞) 總之,如果你想把b

iOS開發 .framework的Optional(弱引用)和Required(引用)區別

首先,參考文件:https://blog.stackmob.com/2013/03/objective-c-tip-of-the-month-optional-frameworks/ 強引用(Required)的framework是一定會被載入到記憶體的,但是弱引用(Optional)的framework只

iOS開發-Block使用及迴圈引用的解決

Block是一種比較特殊的資料型別。它可以儲存一段程式碼,在合適的時候取出來呼叫。 ◦   我們可以把Block當做Objective-C的匿名函式。Block允許開發者在兩個物件之間將任意的語句當做資料進行傳遞,往往這要比引用定義在別處的函式直觀。另外,block的實現具

C++ Block程式碼

Block是什麼? Block是C語言的一個語法特性,同時也是C語言的執行時特性,它很像C中的函式指標,因為你可以像使用函式指標一樣的去使用block物件;它也很像C++中的函式物件,因為除了要執行的程式碼,block還可以攜帶和block繫結的狀態資訊。

iOS Block的迴圈引用問題

在iOS開發中,block在不同介面的回撥傳值有著舉足輕重的分量,但如果用的不恰當的話,可能會引發記憶體問題,在微信公眾號和部落格中都看到這篇文章,感覺說的在理,就在這裡分享給大家了,希望能對大家有幫助。 前言 本篇文章精講iOS開發中使用Block時一定

iOS Block 中 迴圈引用的解決

前言: 在iOS 中使用block 時 ,如果稍微不注意,則很容易 導致 迴圈引用 導致記憶體洩漏 二者都無法釋放 。出現記憶體洩漏。 #import <Foundation/Foundation.h> typedefvoid (^EOCNetworkFet

iOS 使用巨集定義函式和程式碼

iOS使用巨集定義函式和程式碼塊 今天在開發過程中碰到一個問題:就是父類中要向外傳送通知,然後子類中或者其他類中來接收它。當然一般是把它寫到類方法中去,但是有個問題,就是如果呼叫的類不是它的子類,就不能直接呼叫,當然也可以採用靜態方法實現,我這裡主要是想用巨集