Skip to Content
COCOA學習手冊--使用OBJECTIVE-C第三版
book

COCOA學習手冊--使用OBJECTIVE-C第三版

by Paris Buttfield-Addison, Jonathon Manning
June 2013
Intermediate to advanced
360 pages
6h 50m
Chinese
GoTop Information, Inc.
Content preview from COCOA學習手冊--使用OBJECTIVE-C第三版
Block Operation Queue
|
95
Block 與記憶體管理
上面討論到 block 如何捕捉到它們所參照之變數的值。不過,Objective-C 物件太大,以
致於不能夠以值的方式被複製進來,而且單純捕捉指向其記憶體的指標並不安全。為了
解決這個問題,每當你在 block 裡參照 Objective-C 物件時,它會被該 block 保留起來,
並且在 block 被釋放時跟著被釋放,這使得該物件可以存續得跟該 block 一樣久,並且
保證該 block 總是能夠安全地被呼叫,因為它所參照的物件還存在於記憶體當中。
使用 __block Block 內部修改本地變數
當你在 block 裡使用定義在該 block 以外的變數時,你可以隨心所欲地存取該變數的
值。對物件來說,該變數被保留(retain),對非物件來說,該變數裡的資料在建立該
block 時被複製到 block 裡。
不過,有時候,對 block 來說,能夠修改定義在它外面的變數是很有用的。當你想要這
麼做時,使用
__block
關鍵字標示該變數,這讓你能夠在該 block 裡修改這個變數。
例如,這段程式碼不會像你預期得那樣運作︰
int i = 0;
void(^myBlock)() = ^{
i = 4;
};
myBlock();
NSLog(@"i is now %i", i);// 會印出 "0"
要修正它,你必須這樣做︰
__block int i = 0;
void(^myBlock)() = ^{
i = 4; ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

網頁互動式資料視覺化:使用D3

網頁互動式資料視覺化:使用D3

Scott Murray
深入淺出代數

深入淺出代數

Tracey Pilone, Dan Pilone
自然语言处理实战:从入门到项目实践

自然语言处理实战:从入门到项目实践

Sowmya Vajjala, Bodhisattwa Majumder, Anuj Gupta, Harshit Surana

Publisher Resources

ISBN: 9789862768136