问题分析 我看过很多文章关于在dispatch_async的block里面使用_weak self, 但是让我疑惑的是,以下代码是否需要必须使用_weak self, 因为我也看到了很多观点说,在有些情况下不需要使用__weak self. self.myQueue = dispatch_queue_create("com.biview.core_data", NULL); dispatch_async(self.myQueue, ^(void){ if(!self.var1){ se…
首先要说说什么时候使用weakSelf和strongSelf. 下面引用一篇博客<到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf>的内容: Objective C 的 Block 是一个很实用的语法,特别是与GCD结合使用,可以很方便地实现并发.异步任务.但是,如果使用不当,Block 也会引起一些循环引用问题(retain cycle)-- Block 会 retain 'self',而 'self' 又 retain 了 Block.因为在 ObjC…
首先要说说什么时候使用weakSelf和strongSelf. 下面引用一篇博客<到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf>的内容: Objective C 的 Block 是一个很实用的语法,特别是与GCD结合使用,可以很方便地实现并发.异步任务.但是,如果使用不当,Block 也会引起一些循环引用问题(retain cycle)—— Block 会 retain ‘self’,而 ‘self‘ 又 retain 了 Block.因为在 ObjC…
Objective C 的 Block 是一个很实用的语法,特别是与GCD结合使用,可以很方便地实现并发.异步任务.但是,如果使用不当,Block 也会引起一些循环引用问题(retain cycle)—— Block 会 retain ‘self’,而 ‘self‘ 又 retain 了 Block.因为在 ObjC 中,直接调用一个实例变量,会被编译器处理成 ‘self->theVar’,’self’ 是一个 strong 类型的变量,引用计数会加 1,于是,self retains queu…
转载,原文: http://blog.lessfun.com/blog/2014/11/22/when-should-use-weakself-and-strongself-in-objc-block/ 当然有一个更详细的专题: http://tanqisen.github.io/blog/2013/04/19/gcd-block-cycle-retain/ Objective C 的 Block 是一个很实用的语法,特别是与GCD结合使用,可以很方便地实现并发.异步任务.但是,如果使用不当,B…
例子1: ; void (^blk)(void) = ^(){ printf("in block %d[%p]\n", val, &val); //in block 10[0x100300020] }; val = ; printf("out block %d[%p]\n", val, &val); //out block 2[0x7fff5fbff82c] blk(); 例子2: __block ; void (^blk)(void) = ^(){…
使用 weak–strong dance 技术 block 可以直接引用 self,但是要非常小心地在 block 中引用 self.因为在 block 引用 self,可能会导致循环引用.如下例所示: @interface KSViewController () { id _observer; } @end @implementation KSViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any addition…
在block中调用 self,那么就会引起循环引用问题,那么这是为什么呢? 为什么self会对block进行强引用呢???? 这里推荐一篇关于block的专业文章,http://blog.csdn.net/jasonblog/article/details/7756763…
当block(代码块)的返回值是float时,应注意的地方:定义的返回值类型一定要与return的返回值类型一样 我们以两个数的四则运算来举例 在main.m文件中的四则运算中,我采用两种返回值类型(int 与 float)相互对照. #import <Foundation/Foundation.h> void fun1(int(^block)(int a,int b)){ block(,); } void fun2(float(^block)(float a,float b)){ block…
原文地址:http://www.cnblogs.com/lujianwenance/p/5910490.html Block在实际的开发中非常的常用,事件回调.传值.封装成代码块调用等等.很多人都对block有一个直观的印象,就是需要weak对象,打破当前的引用循环.引用循环相信大家都不陌生,比如A引用B,B引用了A:或者A->B , B->C,C->A;中间的引用如果不能断开就会引用循环,造成对象没办法释放导致内存泄露.所以很多人在使用block时都很小心或者说不管有没有引用循环都使用…
在Objective-C的block中无法使用C数组,即使我们不对C数组做任何改变,编译的时候也会报错: #include <stdio.h> int main() { const char text[] = "hello"; //声明数组类型变量 void (^blk)(void) = ^{ printf(]); //只是读取数组变量 }; } 这是编译之后的结果: 解决的办法是使用指针声明数组: #include <stdio.h> int main() {…
前言: 在处理完框架内存泄漏的问题后,见上篇:讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(中)- IOS不为人知的Bug 发现业务代码有一个地方的内存没释放,原因很也简单: 在block里用到了self,造成双向引用,然后就开始思考怎么处理这个问题. 常规则思维,就是改代码,block不要用到self,或只用self的弱引用. 只是框架这里特别,有一个特好用的系列,STLastXXX系列,是用宏定义的,而且该宏指向了self. 这么好用的STLastXXXX宏定义系列,…
问题 最近遇到一个已经使用了weak-strong dance的block依旧强引用了self的情况,好在block没被VC持有只是延迟释放,但这里的关键是用了weak_self的blcok理应不会强持有self才对,莫非之前的代码都有问题?下面是"有问题的"代码(为方便理解已删掉部分无关代码) - (void)requestQBossYellowDiamondAdvWithId:(int)appid { qz_weakify(self); [[QBossEngine instance…
转自:http://www.cnblogs.com/easonoutlook/archive/2012/08/22/2650070.html block 的目的是为了支持并行编程,对于普通的 local 变量,我们就不能在 block 里面随意修改(原因很简单,block 可以被多个线程并行运行,会有问题的),而且如果你在 block 中修改普通的 local 变量,编译器也会报错.那么该如何修改外部变量呢?有两种办法,第一种是可以修改 static 全局变量:第二种是可以修改用新关键字 __b…
[避免Block中的强引用环] In manual reference counting mode, __block id x; has the effect of not retaining x. In ARC mode, __block id x; defaults to retaining x (just like all other values). To get the manual reference counting mode behavior under ARC, you cou…
三.Block中__block实现原理 我们继续研究一下__block实现原理. 1.普通非对象的变量 先来看看普通变量的情况. #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { __block int i = 0; void (^myBlock)(void) = ^{ i ++; NSLog(@"%d",i); }; myBlock(); return 0; } 把上述代…
1.关于__weak__weak只能在ARC模式下使用,也只能修饰对象(比如NSString等),不能修饰基本数据类型(比如int等)__weak修饰的对象在block中不可以被重新赋值.__weak只在ARC下使用,可以避免循环引用.__weak修饰对象不会增加引用 __weak __typeof(self) weakSelf = self; self.testBlock = ^{ [weakSelf doSomeThing]; }); 弱引用不会影响对象的释放,但是当对象被释放时,所有指向它…
警告:ARC Retain Cycle Capturing 'self' strongly in this block is likely to lead to a retain cycle 代码: self.refreshHeader.beginRefreshingBlock=^(){ // 后台执行: dispatch_async(dispatch_get_global_queue(0, 0), ^{ sleep(2); dispatch_async(dispatch_get_main_qu…
在代码块中使用对象的成员时(成员变量是属性strong,MRC估计是retain时效果一样,使用方法时也一样): 警告: capturing self strongly in this block is likely to lead to a retain cycle 意思应该是block会retain一次,所以使用前最好 __block MyClass* bObject = self; __block KKHomePageVC* bObject = self; [_table addLegen…
让我们长话短说.请参阅如下代码: - (IBAction)didTapUploadButton:(id)sender { NSString *clientID = @"YOUR_CLIENT_ID_HERE"; NSString *title = [[self titleTextField] text]; NSString *description = [[self descriptionTextField] text]; [[UIApplication sharedApplicati…
问题 我们知道,在使用 block 的时候,为了避免产生循环引用,通常需要使用 weakSelf 与 strongSelf,写下面这样的代码: __weak typeof(self) weakSelf = self; [self doSomeBlockJob:^{ __strong typeof(weakSelf) strongSelf = weakSelf; if (strongSelf) { ... } }]; 那么请问:什么时候在 block 里面用 self,不需要使用 weak sel…
看惯了什么tempSelf weakSelf,来点高大的 #define weakify(...) \ rac_keywordify \ metamacro_foreach_cxt(rac_weakify_,, __weak, __VA_ARGS__) #define unsafeify(...) \ rac_keywordify \ metamacro_foreach_cxt(rac_weakify_,, __unsafe_unretained, __VA_ARGS__) #define st…
现象: WINDOWS安装MINGW4.8.1,环境变量设置后,命令行窗体G++能够执行.但编译文件时提示: CreateProcess: No such file or directory. 安装CODE:BLOCK.使用CODE:BLOCK编译仍然出现提示: CreateProcess: No such file or directory. 原因: CODE:BLOCK自己主动使用了原来安装的MINGW.而不是其自带的MINGW. 解决方法: 又一次设置编译环境: watermark/2/t…
将代码块中的 self换成unsafeSelf __unsafe_unretained 与 __weak 99%相同 __weak 当对象释放之后 会自动设置为nil 而__unsafe_unretained不会…
__block __weak typeof(self) tmpSelf = self; ^(){ tmpSelf...... }…
__weak typeof(self) weakSelf = self; [self doABlockOperation:^{     __strong typeof(weakSelf) strongSelf = weakSelf;     if(strongSelf) {         ...     } }];…
http://blog.csdn.net/jasonblog/article/details/7756763…
可以使用如下的方式: STR := q'[ CREATE TABLE TNAME AS SELECT ... FROM INPUT_TABLE IP WHERE ((IP.DATE_FIELD = TO_DATE(', 'DD.MM.sYYYY'))) ]'; 解决方案来自:https://stackoverflow.com/questions/18096740/use-of-single-quote-and-double-single-quote-in-pl-sql-block 以上…
http://blog.lessfun.com/blog/2014/11/22/when-should-use-weakself-and-strongself-in-objc-block/…