美文网首页
Block使用总结

Block使用总结

作者: WHZ闹哪样 | 来源:发表于2016-08-30 14:59 被阅读255次

void (^mutiplayBlock)(NSString *) = ^(NSString *str) {
NSLog(@"st=%@", str);
};
void :block返回值类型;
^ :脱字符,块语法标记
^mutiplayBlock :脱字符将mutiplayBlock声明为一个块对象
NSString * : 参数类型
递归关系就是实体自己和自己建立关系。
__nullable表示对象可以是NULL或nil,而__nonnull表示对象不应该为空

具体常用的用法(可以添加参数跟返回值)

import <UIKit/UIKit.h>

typedef void(^MyFirstBlock)(NSString *str);
typedef void(^MySecondBlock)(NSString *str);
typedef void(^setColor)(UIColor *);

@interface ViewController : UIViewController
@property (nonatomic, copy) void (^MyBlock)(NSString *block);
@property (nonatomic, copy) setColor color;

  • (void)creatBlock:(void (^)(NSDictionary *dic))success;
  • (void)firstBlock:(MyFirstBlock)first
    second:(MySecondBlock)second;
    @end

ARC情况下
1.如果用copy修饰Block,该Block就会存储在堆空间。则会对Block的内部对象进行强引用,导致循环引用。内存无法释放。解决方法:新建一个指针(__weak typeof(Target) weakTarget = Target )指向Block代码块里的对象,然后用weakTarget进行操作。就可以解决循环引用问题。
2.如果用weak修饰Block,该Block就会存放在栈空间。不会出现循环引用问题。
MRC情况下用copy修饰后,如果要在Block内部使用对象,则需要进行(__block typeof(Target) blockTarget = Target )处理。在Block里面用blockTarget进行操作。

声明block的时候实际上是把当时的临时变量又复制了一份,在block里即使修改了这些复制的变量,也不影响外面的原始变量。即所谓的闭包。
但是当变量是一个指针的时候,block里只是复制了一份这个指针,两个指针指向同一个地址。所以,在block里面对指针指向内容做的修改,在block外面也一样生效。

__weak __typeof(&*self)weakSelf =self; 等同于
__weak UIViewController *weakSelf =self;
__strong typeof(self) strongSelf = weakSelf; 在块语法内部调用
为什么不用__block 是因为通过引用来访问self的实例变量 ,self被retain,block也是一个强引用,引起循环引用,用__week是弱引用,当self释放时,weakSelf已经等于nil。

__block 为了改变block代码块外部的变量。
__weak 是为了防止循环引用(memory cycle),引起内存泄露的问题。不会影响对象的释放, 对象在被释放的同时,指向它的弱引用会自动被置nil
strong所声明的变量将成为对象的持有者;引用计数+1
weak 所声明的变量将没有对象的所有权,对象可以自动赋值nil;引用计数不变
copy 所声明的变量是拷贝对象的持有者。引用计数+1

相关文章

  • iOS进阶-深度学习block原理

    目录 基本声明使用总结 block在ARC、MRC下内存方式 使用block遇到的坑 更深次的看block的本质 ...

  • Block使用总结

    Block和函数很像,具有如下特性: 可以保存代码 有返回值 有形参 调用方式一样 使用的形式举例:1)带参数的形...

  • Block 使用总结

    Block 内存管理: Block 内存主要分派到 NSGlobalBlock(data area),NSMall...

  • Block使用总结

    void (^mutiplayBlock)(NSString *) = ^(NSString *str) {NSL...

  • block使用总结

    1.block使用步骤: 1>.有两个控制器,主动传值或者提供方法的控制器A,接受值的控制器B2>.让A控制器ty...

  • Objective-C Block Part2 - 实现原理

    Block 的本质 在 Objective-C Block Part1 中总结了 Block 的一些使用规则,但...

  • iOS block的使用

    在项目中,很多时候我们都会遇到使用block进行数据传值,而block也非常方便,现在就总结一下block的使用方...

  • 随手记

    1.tabbarTitle选中 2.block总结 2.1.block内没有使用外部变量或是只使用了全局/静态变量...

  • block的声明以及使用的底层实现

    1. 在OC中block的声明->赋值->使用 2. block的底层实现 3. 总结 声明:参考文章https:...

  • Block的安全用法

    block用的越来越多block被滥用block被乱用 安全用法 现在总结一个安全可靠的使用方法: 是的,就是这个...

网友评论

      本文标题:Block使用总结

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