<span id="Label3"></p>Introduction to block in iOS (i) basic one, Overview<p><p>Block is a c-level syntax and runtime feature. Block is similar to the C function, but the block is more flexible than the C function, which is reflected in the stack memory, heap memory reference, and we can even pass a block as a parameter to other functions or block.</p></p><p><p></p></p>second, Warm Up<p><p>Let's look at a relatively simple block example:</p></p> <ol class="dp-cpp"> <ol class="dp-cpp"> <li class="alt"><span class="datatypes">int multiplier = 7;</span></li> <li><span class="datatypes">int (^myblock) (<span class="datatypes">int) = ^ (<span class="datatypes">int Num) {</span> </span></span></li> <li class="alt"><span class="keyword">return num * multiplier;</span></li> <li>};</li> </ol> </ol><p><p>In this example, Myblock is a block variable that takes a parameter of type int and returns a value of type int. Does it look like a C function?</p></p><p><p>Come on, let's have a typedef.</p></p> <ol class="dp-cpp"> <ol class="dp-cpp"> <li class="alt"><span class="keyword">typedef <span class="keyword">void (^boolblock) (<span class="datatypes">BOOL); <span class="comment"> A block that accepts only one bool parameter and no return value</span> </span> </span></span></li> <li><span class="keyword">typedef <span class="datatypes">INT (^intblock) (<span class="keyword">void); <span class="comment"> A block with no parameters that returns an int</span> </span> </span></span></li> <li class="alt"><span class="keyword">typedef boolblock (^HUGEBLOCK) (intblock); <span class="comment">//see, This hugeblock parameter and return value are block</span></span></li> </ol> </ol><p><p></p></p>third, more detailed examples <blockquote> <blockquote> <p>Note: the typedef above are also valid ~</p> </blockquote> </blockquote><p><p><strong>Take the initiative to Call:</strong></p></p> <ol class="dp-cpp"> <ol class="dp-cpp"> <li class="alt">-(<span class="keyword">void) SomeMethod</span></li> <li>{</li> <li class="alt">Boolblock Ablock = ^ (<span class="datatypes">BOOL BValue) {</span></li> <li>NSLog (@<span class="string">"Bool block!");</span></li> <li class="alt">};</li> <li>Ablock ();</li> <li class="alt">}</li> </ol> </ol><p><p><strong>Returned as a parameter:</strong></p></p> <ol class="dp-cpp"> <ol class="dp-cpp"> <li class="alt"><span class="keyword">typedef <span class="keyword">void (^boolblock) (<span class="datatypes">BOOL);</span> </span></span></li> <li>-(boolblock) Foo ()</li> <li class="alt">{</li> <li>Boolblock Ablock = ^ (<span class="datatypes">BOOL BValue) {</span></li> <li class="alt">NSLog (@<span class="string">"Bool block!");</span></li> <li>};</li> <li class="alt"><span class="keyword">return [[ablock copy] autorelease]; <span class="comment">//must copy, Copy it to the heap, more detailed principles, will be explained in the following chapters</span> </span></li> <li>}</li> </ol> </ol><p><p><strong>A member of the Class:</strong></p></p> <ol class="dp-cpp"> <ol class="dp-cpp"> <li class="alt">@interface Obj1:nsobject</li> <li>@property (nonatomic, copy) Boolblock block; <span class="comment">//reason ditto, Students</span></li> <li class="alt">@end</li> <li></li> <li class="alt">OBJ1 *obj1 = ...</li> <li>Obj1.block = ^ (<span class="datatypes">BOOL BValue) {</span></li> <li class="alt">NSLog (@<span class="string">"Bool block!");</span></li> <li>};</li> </ol> </ol><p><p><strong>Parameters for other Functions:</strong></p></p> <ol class="dp-cpp"> <ol class="dp-cpp"> <li class="alt">-(<span class="keyword">void) foo (boolblock block)</span></li> <li>{</li> <li class="alt"><span class="keyword">if (block) {</span></li> <li>Block ();</li> <li class="alt">}</li> <li>}</li> </ol> </ol><p><p><strong>Even other block parameters:</strong></p></p> <ol class="dp-cpp"> <ol class="dp-cpp"> <li class="alt">Boolblock bblock = ^ (<span class="datatypes">BOOL bV) {<span class="keyword">if (bv) {<span class="comment">/*do some thing*/}};</span> </span> </span></li> <li>Hugeblock Hblock = ^ (boolblock Bb) {bb ();};</li> <li class="alt"></li> <li>Hbolck (bblock);</li> </ol> </ol><p><p><strong>ah, Global variables! :</strong></p></p> <ol class="dp-cpp"> <ol class="dp-cpp"> <li class="alt"><span class="keyword">static <span class="datatypes">int (^maxintblock) (<span class="datatypes">int, <span class="datatypes">int) = ^ (<span class="datatypes">int a, <span class="datatypes">int B) {<span class="keyword">return a>b?a:b;};</span> </span> </span> </span> </span></span></span></li> <li><span class="datatypes">int main ()</span></li> <li class="alt">{</li> <li>printf (<span class="string">"%d\n", maxintblock (2,10)); </span></li> <li class="alt"><span class="keyword">return 0;</span></li> <li>}</li> </ol> </ol><p><p>well, you know how the block might be used.</p></p><p><p></p></p>four, Special markings, __block<p><p>If you want to modify the stack variables declared outside of block within a block, be sure to add __block tags to the variable:</p></p> <ol class="dp-cpp"> <ol class="dp-cpp"> <li class="alt"><span class="datatypes">int main ()</span></li> <li>{</li> <li class="alt">__block <span class="datatypes">int i = 1024x768;</span></li> <li>Boolblock bblock = ^ (<span class="datatypes">BOOL BV) {</span></li> <li class="alt"><span class="keyword">if (bV) {</span></li> <li>i++; <span class="comment">//if There is no __block tag, it cannot be compiled. </span></li> <li class="alt">}</li> <li>};</li> <li class="alt">}</li> </ol> </ol><p><p>Introduction to block in iOS (i) basics</p></p></span>
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.
A Free Trial That Lets You Build Big!
Start building with 50+ products and up to 12 months usage for Elastic Compute Service