IOS中的__block关键字简单使用

/**13.__block什么时候用?**/

结论:在block里面修改局部变量的值都要用__block修饰

/**14.请教一个问题:在block里面,
对数组执行添加操作,
这个数组需要声明成 __block吗?**/

不需要声明成__block,因为testArr数组的指针并没有变(往数组里面添加对象,指针是没变的,只是指针指向的内存里面的内容变了)

/**15.在block里面,
对NSInteger进行修改,
这个NSInteger是否需要声明成__blcok

?**/

NSInteger的值发生改变,则要求添加__block修饰

代码实例:

NSMutableArray *testArr =[[NSMutableArray alloc] initWithObjects:@"1",@"2", nil];
    __block NSInteger a=10;
    /**结论:在block里面修改局部变量的值都要用__block修饰**/
    void (^TestBlock)(void) = ^{
//        NSMutableArray *temArr=[[NSMutableArray alloc] init];
//        testArr=temArr;//testArr数组的指针发生改变时,testArr要添加__block修饰

        a=100;//a的值发生改变,则要求添加__block修饰
//        testArr不需要声明成__block,因为testArr数组的指针并没有变(往数组里面添加对象,指针是没变的,只是指针指向的内存里面的内容变了)
        [testArr addObject:[NSString stringWithFormat:@"3"]];
        NSLog(@"_block testArr :%@ a:%d", testArr,a);

    };
    a=0;
    TestBlock();

    NSLog(@"testArr :%@ a:%d", testArr,a);

运行结果:

2015-05-13 20:16:23.862 WXMovie_study[22827:1683307] _block testArr :(

    1,

    2,

    3

) a:100

2015-05-13 20:16:23.862 WXMovie_study[22827:1683307] testArr :(

    1,

    2,

    3

) a:100

时间: 2024-11-03 05:42:06

IOS中的__block关键字简单使用的相关文章

IOS 中block结构的简单用法

自从block出现之后,很多API都开始采用这样的结构,由此可见,block确实有许多优势存在,这里将一些简单用法总结如下: 一.如何声明一个block变量 我们通过^符号来声明block类型,形式如下: void (^myBlock)(); 其中第一个void是返回值,可以是任意类型,中间括号中^后面的是这个block变量的名字,我把它命名为myBlock,最后一个括号中是参数,如果多参数,可以写成如下样式: int (^myBlock)(int,int); 同样,你也可以给参数起名字: in

iOS中关联对象的简单使用objc_setAssociatedObject

首先看一下此方法接收的参数 objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy) 被关联的对象,下面举的例子中关联到了UIAlertView 要关联的对象的键值,一般设置成静态的,用于获取关联对象的值 要关联的对象的值,从接口中可以看到接收的id类型,所以能关联任何对象 关联时采用的协议,有assign,retain,copy等协议,具体可以参考官方文档 下面就以

IOS中的数据存储 简单总结

1.  NSKeyedArchiver(加密形式) 2.  plist 3.  NSUserDefaults 4.  writeToFile 5.  SQLite3 ==== NSKeyedArchiver ======================================== -------CKPerson.h 代码 @interface CKPerson : NSObject @property (nonatomic, copy) NSString *name; @property

iOS中让颜色赋值简单一点吧

在开发过程中,UE一般会给十六进制的颜色值,而如果RD同学每次都要去将十六进制进行转换,那太麻烦,这里写个预定义mark下. #define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue &

iOS中手势的使用

在iOS中添加手势比较简单,可以归纳为以下几个步骤: 创建对应的手势对象: 设置手势识别属性[可选]: 附加手势到指定的对象: 编写手势操作方法: 为了帮助大家理解,下面以一个图片查看程序演示一下上面几种手势,在这个程序中我们完成以下功能: 如果点按图片会在导航栏显示图片名称: 如果长按图片会显示删除按钮,提示用户是否删除: 如果捏合会放大.缩小图片: 如果轻扫会切换到下一张或上一张图片: 如果旋转会旋转图片: 如果拖动会移动图片: 具体布局草图如下: 为了显示导航条,我们首先将主视图控制器KC

iOS中__block 关键字的底层实现原理

在 <iOS面试题集锦(附答案)> 中有这样一道题目: 在block内如何修改block外部变量?(38题)答案如下: 默认情况下,在block中访问的外部变量是复制过去的,即:写操作不对原变量生效.但是你可以加上 __block 来让其写操作生效,示例代码如下: __block int a = 0; void (^foo)(void) = ^{ a = 1; }; foo(); //这里,a的值被修改为1 这是 微博@唐巧_boy的<iOS开发进阶>中的第11.2.3章节中的描述

iOS中assign、copy 、retain等关键字的含义

assign: 简单赋值,不更改索引计数copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 Copy其实是建立了一个相同的对象,而retain不是:比如一个NSString对象,地址为0×1111,内容为@"STR" Copy到另外一个NSString之 后,地址为0×2222,内容相同,新的对象retain为1, 旧有对象没有变化 retain到另外一个NSString之 后,地址相同(建立一个指

iOS 中 const static extern 关键字总结

在看一些高手所写的代码时,总是可以看到我们小白平常不用的关键字,一次,两次,三次,不能总是不明不白,现在总结一下日常开发中常用的关键字的作用: 关键字const/static/extern的释义和用法 1. const 这个单词翻译成中文就是 "常量"的意思.在程序中我们知道常量的值是不能变的,固定的.所以const关键字的作用就是: (1) const用来修饰右边的基本变量或指针变量 (2)被修饰的变量只读,不能被修改 下面举一个简单的例子: //声明一个int类型的变量a 初始化值

iOS中动画的简单使用

//***简单动画 [UIView animateWithDuration:3 animations:^{ //      _animationView.center = CGPointMake(arc4random()%320, arc4random()%480);//改变中心点 //      _animationView.frame = CGRectMake(arc4random()%320, arc4random()%480,arc4random()%320, arc4random()%