9.22-oc-block

2016-09-22  本文已影响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

注意事项:

上一篇 下一篇

猜你喜欢

热点阅读