美文网首页
9.22-oc-block

9.22-oc-block

作者: 没有北方的南方 | 来源:发表于2016-09-22 20:15 被阅读17次

    static: 生命周期,作用域,存储位置

    对于全局变量来说,本身生命周期就是在整个程序

    对于局部变量来说,改变了生命周期,为当前的函数体内,改变了存储位置,不在堆/栈上,在一个静态存储空间里,但是作用域并没有改变。

    extern: 声明,下划线

    只是用来获取全局变量(包括全局静态变量)的值,不能用于定义变量

    extern工作原理:先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。

    在内存中存储的是为下划线的样式,例如变量a,b,c即_a,_b,_c

    *重点错误

    1 duplicate symbol for architecture x86_64

    此错误说明了在声明文件中使用了其他文件的变量,而未进行extern

    block:swift中的闭包

    主要用法:

    • 普通传值调用
    • 作为函数参数调用
    • 作为类属性调用

    在.h声明文件中

    #import <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController
    @property (nonatomic,copy) void (^Blo2)(void);
    
    -(void)BLOCK:(void(^)(void))handle;
    
    @end
    
    

    在.m实现文件中

    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    //NSInteger a = 17;
    - (void)viewDidLoad {
        [super viewDidLoad];
        NSInteger a = 10;
        NSLog(@"a = %ld",a);
        NSLog(@"&a = %p",&a);
        void (^Block)(void)=^{
    //        a = 11;
            NSLog(@"a = %ld",a);
            NSLog(@"&a = %p",&a);
        };
        a = 12;
        NSLog(@"调用前:a = %ld",a);
        NSLog(@"调用前:&a = %p",&a);
        
        Block();
        NSLog(@"调用后:a = %ld",a);
        NSLog(@"调用后:&a = %p",&a);
        
        //Block作为函数参数
        ViewController *view = [ViewController new];
        [view BLOCK:^{
            NSLog(@"ss");
        }];
        
        //Block作为属性
        view.Blo2 =^ {
            NSLog(@"xx");
        };
        view.Blo2();
    }
    
    - (void)BLOCK:(void(^)(void))handle{
        static NSInteger a = 8;
        handle();
        
    };
    @end
    
    

    注意事项:

    • 1.作为全局变量和静态变量,Block改变的是同一个值,同一个地址,其他的都是将其从栈上复制一份到堆上。

    • 2.__block将局部变量进行修饰,但是实质还是将其复制了一份,但是其后的每一次都是同一个。

    • 3.block不能改变局部变量的值。

    • 4.block如果要使用局部变量,也是将其复制一份,但是只有可读权限,不能改变其值,但是再次改变局部变量的值的时候,还是改变外部的,block中的值并不会发生改变。

    • 5.注意文件中ARC是否启用,在不同的环境下,可能输出的地址会有所不同,默认为ARC会自动启用。(ARC :Automatic Reference Counting)

    相关文章

      网友评论

          本文标题:9.22-oc-block

          本文链接:https://www.haomeiwen.com/subject/ktopettx.html