__block __weak】的更多相关文章

IOS BLOCK收集 在ios,blocks是对象,它封装了一段代码,这段代码可以在任何时候执行.Blocks可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.它和传统的函数指针很类似,但是有区别:blocks是inline的,并且它对局部变量是只读的. Blocks的定义:          int (^Multiply)(int, int) = ^(int num1, int num2) {return num1 * num2;}; 定义了一个Multiply的block…
无论是QQ还是微信的移动客户端都少不了定位功能,之前在微信demo中没有添加定位功能,今天就写个定位的小demo来了解一下定位和地图的东西.地图和定位看上去是挺高大上一东西,其实用法比TableView简单多了,下面的Demo是用的iOS中自带的地图和定位,当然了也可以用第三方的来加载地图,比如百度地图啥的,在这就不赘述了.今天的博客主要是介绍MKMapView的使用,MapView的使用和其他组件的用法差不多,MapView用的是委托回调,在使用mapView的Controller中要实现MK…
ARC的机制是什么?它在那里放入retain/release函数调用? 请停止思考这些问题,把更多的精力放在下面的问题上,比如你的程序逻辑,对象的强,弱引用,对象的所属关系,可能的循环引用等问题上. 我还需要为我的类写一个dealloc函数么? 可能. 因为ARC并不自动调用malloc/free,并不自动管理像核心功能对象.文件描述符等的生命周期,所以你仍然需要在dealloc中释放它们. 你不会(实际上是不能)释放对象实例,但是你仍然需要为系统类调用[self setDelegate:nil…
__block __weak typeof(self) tmpSelf = self; ^(){ tmpSelf...... }…
1.先上段代码       __block typeof(self) tmpSelf = self; [tableview addLegendHeaderWithRefreshingBlock:^(){ [ tmpSelf initData:NO]; }]; 写的时候没怎么注意,后面测试的时候发现每次push到这个页面的时候内存就不断增大,而且比较有规律,考虑是内存泄露了,用静态和动态分析没发现有 内存泄露,但是内存就是不断的增长,后面一想是不是没释放,断点下dealloc发现果然没执行,然后各…
代理传值: // SendViewController.h #import <UIKit/UIKit.h> @protocol SendInFor <NSObject> -(void)sendInForIdea:(NSString*)text; @end @protocol SendInForTwo <NSObject> -(void)sender:(NSString*)text; @end @interface SendViewController : UIViewC…
webview使用JSContext 向网页js注入时时机要选为网页加载完成后即放在 -(void)webViewDidFinishLoad:(UIWebView *)webView 方法 : -(void)webViewDidFinishLoad:(UIWebView *)webView{ context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; __bl…
iOS的内存管理机制 Objective-C在iOS中不支持GC(垃圾回收)机制,而是采用的引用计数的方式管理内存. 引用计数:在引用计数中,每一个对象负责维护对象所有引用的计数值.当一个新的引用指向对象时,引用计数器就递增,当去掉一个引用时,引用计数就递减.当引用计数到零时,该对象就将释放占有的资源. 以开灯为例: 图中,“需要照明的人数”即对应我们要说的引用计数值. 第一个人进入办公室,“需要照明的人数”加1,计数值从0变为1,因此需要开灯: 之后每当有人进入办公室,“需要照明的人数”就加1…
# 前言 Cocoa中使用NSNotification.NSNotificationCenter和KVO来实现观察者模式,实现对象间一对多的依赖关系. 本篇文章主要来讨论NSNotification和NSNotificationCenter # NSNotification NSNotification是方便NSNotificationCenter广播到其他对象时的封装对象,简单讲即通知中心对通知调度表中的对象广播时发送NSNotification对象. @interface NSNotific…
说明: <1>阅读本问,请参照block前述文章加以理解: <2>环境:ARC: <3>变量类型:基本数据类型或者对象类型的auto局部变量: 一.三种情形 //代码 void test1() { ; __block ; Person *per = [[Person alloc] init]; void(^block)(void) = ^{ NSLog(@"%d %d %p", num, age, per); }; block(); } //打印 -…
iOS Block的本质(四) 上一篇文章iOS Block的本质(三)中已经介绍过block变量的捕获,本文继续探寻block的本质. 1. block内修改变量的值 int main(int argc, const char * argv[]) { @autoreleasepool { int age = 10; Block block = ^ { // age = 20; // 无法修改 NSLog(@"%d",age); }; block(); } return 0; } 默认…
http://blog.csdn.net/u014795020/article/details/72514109 前言 今天在Swift工程中不小心创建了一个OC文件,于是乎提示我创建一个桥接文件,那么为什么需要创建桥接文件呢,它的原理又是什么呢? 打开百度一搜,全是教你怎么创建桥接文件的,似乎找不到答案~ LVVM - Low Level Virtual Machine Clang - C Lange Family Frontend for LVVM 编译器探究 GCC GNU编译器套件(GN…
一.__block理解: Blocks可以访问局部变量,但是不能修改, 声明block的时候实际上是把当时的临时变量又复制了一份, 在block里即使修改了这些复制的变量,也不影响外面的原始变量.即所谓的闭包. 如果修改局部变量,需要加__block. API Reference对__block变量修饰符有如下几处解释 //A powerful feature of blocks is that they can modify variables in the same lexical scop…
准备工作 首先我定义了一个类 MyObject 继承 NSObject,并添加了一个属性 text,重写了description方法,返回 text 的值.这个主要是因为编译器本身对 NSString 是有优化的,创建的 string 对象有可能是静态存储区永不释放的,为了避免使用 NSString 引起一些问题,还是创建一个 NSObject 对象比较合适. 另外我自定义了一个 TLog 方法输出对象相关值,定义如下: #define TLog(prefix,Obj) {NSLog(@"变量内…
Blocks理解: Blocks可以访问局部变量,但是不能修改 如果修改局部变量,需要加__block __block int multiplier = 7; int (^myBlock)(int) = ^(int num) { multiplier ++;//这样就可以了 return num * multiplier; }; 2.如果局部变量是数组或者指针的时候只复制这个指针,两个指针指向同一个地址,block只修改指针上的内容.如: NSMutableArray *mArray = [NS…
关于__block 与__weak http://stackoverflow.com/questions/19227982/using-block-and-weak 一下是一些区别的介绍 MRC: __block 能够使访问的变量能够在block中的修改生效,__block能够避免retain cycle. ARC:__block可能会造成retain cycle. 此时如果对原子类型(primitive)的数据如果不用__block修饰的话系统会自动在编译的时候报错的.…
Blocks理解: Blocks可以访问局部变量,但是不能修改 如果修改局部变量,需要加__block __block int multiplier = 7; int (^myBlock)(int) = ^(int num) { multiplier ++;//这样就可以了 return num * multiplier; }; 2.如果局部变量是数组或者指针的时候只复制这个指针,两个指针指向同一个地址,block只修改指针上的内容.如: NSMutableArray *mArray = [NS…
果然还是对最基础的知识了解不透彻,今天看一看iOS中的两个修饰符:__block和__weak .也是做一下温习吧. 1.先说weak,<弱引用> 我们知道weak的使用,比如声明一个控件属性,就会用到weak. 看代码: @property(nonatomic,weak)UILabel *label; 当然这并不是说声明控件就一定使用weak,相反的我在手动创建控件是大多数会使用strong.但如果你比较细心的话,你会发现我们使用xib时,使用的却是weak这一属性.那问题来了,我们使用st…
API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variables in the same lexical scope. You signal that a block can modify a variable using the __block storage type modifier. //At function level are __block vari…
Blocks理解: Blocks可以访问局部变量,但是不能修改 如果修改局部变量,需要加__block __block int multiplier = 7; int (^myBlock)(int) = ^(int num) { multiplier ++;//这样就可以了 return num * multiplier; }; 2.如果局部变量是数组或者指针的时候只复制这个指针,两个指针指向同一个地址,block只修改指针上的内容.如: NSMutableArray *mArray = [NS…
在MRC下,我们通常使用__block , 而在ARC下我们通常使用__weak , 或者__unsafe_unretaine __block(不安全,不建议使用) 来修饰对象防止循环引用而造成的内存泄露. 一般只用__block和__weak,知道这两个的区别就行了! 解释1: __weak不增加引用,__block增加引用 举例,某对象self,self的strong成员变量有blockA,blockA内部引用了self,如果self不经过__weak处理,就会变成: self强引用bloc…
block下循环引用的问题 __block本身并不能避免循环引用,避免循环引用需要在block内部把__block修饰的obj置为nil __weak可以避免循环引用,但是其会导致外部对象释放了之后,block 内部也访问不到这个对象的问题,我们可以通过在 block 内部声明一个 __strong的变量来指向 weakObj,使外部对象既能在 block 内部保持住,又能避免循环引用的问题 __block与__weak功能上的区别. __block会持有该对象,即使超出了该对象的作用域,该对象…
API Reference对__block变量修饰符的解释,大概意思: 1.__block对象在block中是可以被修改.重新赋值的. 2.__block对象在block中不会被block强引用一次,从而不会出现循环引用问题. API Reference对__weak变量修饰符的解释,大概意思: 使用了__weak修饰符的对象,作用等同于定义为weak的property.自然不会导致循环引用问题,因为苹果文档已经说的很清楚,当原对象没有任何强引用的时候,弱引用指针也会被设置为nil. 因此,__…
近日遇到一个非常细的知识点,关于block的循环引用问题.相比非常多人都遇到了.也能顺利攻克了,至于block方面的技术文章.那就很多其它了.这里不再赘述,可是有这样一个问题: What the difference between __weak and __block reference? 使用场景: __block typeof(self) tmpSelf = self; [self methodThatTakesABlock:^ { [tmpSelf doSomething]; }]; 那…
API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variables in the same lexical scope. You signal that a block can modify a variable using the __block storage type modifier. //At function level are __block vari…
API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variables in the same lexical scope. You signal that a block can modify a variable using the __block storage type modifier. //At function level are __block vari…
在基本的开发中遇到 需要弱引用时候 我一般 用 weak  预防 死锁的时候 我会用 block 的确没出过大错  但是这样处理 的确有点囫囵  现在我想好好理解一下这两个修饰符 "block中用到的外部变量最好使用 __weak 修饰,避免内存泄露; block容易引起引用循环的根本原因是: 1,对于(block内部用到的)外部变量,对其执行retain 的时机 与该block的执行时机是不同步的,在block声明的时候就对外部变量进行了retain,而block何时执行甚至是否执行都是不可预…
1,在MRC 时代,__block 修饰,可以避免循环引用:ARC时代,__block 修饰,同样会引起循环引用问题: 2,__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型: 3,__weak只能在ARC模式下使用,也只能修饰对象,不能修饰基本数据类型: 4,__block对象可以在block中被重新赋值,__weak不可以: 5,__unsafe_unretained修饰符可以被视为iOS SDK 4.3以前版本的__weak的替代品,不过不会被自动置…
API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variables in the same lexical scope. You signal that a block can modify a variable using the __block storage type modifier. //At function level are __block vari…
在objective-c中,类中的全局变量经常使用如下的方式申明. @property(nonatomic(1),strong(2))UIImageView *imageView; 其中的1,2处是对此变量的一些属性申明.有以下几种strong weakassignstrong 和 weak 是在arc后引入的关键字,strong类似于retain,引用时候会引用计算+1,weak相反,不会改变引用计数.weak和assign都是引用计算不变,两个的差别在于,weak用于object type,…