:内联(inline)Block
内联block 说白了就是block被嵌入到一个函数中
例如:
typedef void (^HelloBlock)(void);
- (void) BlockTest{
HelloBlock myBlock= ^(void){
NSLog(@"Hello Block");
};
myBlock();
}
注意事项
1.内联的block中内部定义的变量 自己本身有读写权限
2.block内部要修改外部变量 需要将外部变量声明__block
3.Block retain是无效的,要想保留block生命周期,可以通过copy来实现,记得release
4.被block的应用的对象,retainCount会自动加一,为了打破这种 retain circle,可以在对象前加__block,这样block块就不会维护这个对象了
下面的写法如果不加上_block a无法dealloc
__block A a =[ [[A alloc] init] withBlock:^{
[a action];
[ a release];
}]; //这样A的dealloc方法就会调用
@interface ViewController : UIViewViewController { NSString *_string; } __block ViewController *controller = self; _block = ^{ NSLog(@"string %@",controller->_string); };
5.在独立的block中不能引用self,如果需要访问可以使用参数传递的方法(可以把其考虑成c+中参数传入函数指针对应copy)**
6.不要随便用.语法
#import <UIKit/UIKit.h> @interface AppDelegate : NSObject <UIApplicationDelegate> @property (nonatomic, strong) NSString *stringProperty; @end
#import "GCDAppDelegate.h" @implementation AppDelegate @synthesize stringProperty; - (void) BlockTestError{ HelloBlock myBlock= ^(void){ self.stringProperty = @"Block Objects"; NSLog(@"String property = %@", self.stringProperty);//运行错误 }; myBlock(); }} - (void) BlockTestCorrect{ HelloBlock myBlock= ^(void){ [self setStringProperty:@"Block Objects"]; NSLog(@"self.stringProperty = %@", [self stringProperty]); //运行ok }; myBlock(); }} @end
相关推荐
iphone开发中block的详解.pages
iOS开发进阶 唐巧 完整目录 高清 讲述了开发过程中一些工具的应用。和一些重要的知识点 如ARC block。
block,对象属性,返回值
2-79 弹球block it ios android.zip项目unity源码下载2-79 弹球block it ios android.zip项目unity源码下载 1.适合学生学习研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
iOS Block 的 基本使用 演示 在Controller之间传值 和 传点击相应事件
iOS中Block的用法,举例,解析与底层原理(Block看我really足够了)
本书是我们智捷iOS课堂团队编写iOS系列丛书中的一本,目的是使一个有iOS开发基础的程序员通过本书的学习,能够开发iOS 硬件访问和传感器应用的程序。另外,对于没有iOS开发基础读者,我们推荐先阅读我们已经出版的...
Block 类回调
Block的学习以及深入学习,适合初学者使用
原理文章:...block 的妙用:结合block和方法的优点实现iOS的链式编程 功能:主要针对段落样式NSMutableParagraphStyle和富文本NSMutableAttributedString进行封装,提升开发效率
iOS开发,block实现原理。深入讲解block实现原理以及讲解与内存管理之间的联系。
本人参考了OC中我比较喜欢常用的一种二次开发网络封装:超强 AFN 封装,它包含了Block及delegate和action三种方法进行网络请求。按照它的思想进行了封装此网络请求 使用的网络请求的方法是参考另一个swift版本的 ...
页面间反向传值,对比了各种方法感觉用block的方式是最方便的。
iOS block 编程要点,对初入门的iOS开发人员很有帮助。
你⽤用哪些办法实现过多线程? GCD和NSOperationQueue的⽐比较,各⾃自优缺点是什么,平时你是怎么使⽤用的?... block是怎样改变外界的变量的?怎样破除block产⽣生的retain cycle? 为什么不能在getter⾥里使⽤用点语法?
iOS开发过程中常用到block语句,但是一直很迷惑,就简单研究了一下,写个Demo给初学者使用
想让我写一个,于是乎,抽空写了一个,代码通俗易懂,简单的封装了一下,各种事件用block回调的,有俩种样式的广告,一种是全屏广告,另一种是下面露logo的,类似网页新闻的启动广告。依赖SDWebImage主要用来下载...
只需要两句代码就可实现相对复杂的饼装统计图,每个部分可以支持点击,点击后有回调block
代码中举了一个例子,用block代替delegate,由AAAController推到BBBController,在B中触发某事件,直接在A中用block解决,以后再也别用delegate了。工程中列举了多个例子,最原始的block、用typedef之后的block、...
使用系统地图进行定位及反编码(二次封装类,便于开发) SYCLLocation:https://github.com/potato512/SYCLLocation