`
zjjzmw1
  • 浏览: 1367943 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

iOS block 循环引用

    博客分类:
  • iOS
阅读更多
 
@interface ToolDemoViewController ()
{
   
BOOL isSuccess;
    void (^testBlock2)(NSString *str);
}
@property (strong, nonatomic) NSString          *testName;
@property (nonatomic, copy) void (^testBlock)(NSString *str);
 
#pragma mark - 测试循环引用
- (void)testWeakAction {
   
   
// 这里不需要 __weak
    [
UIView animateWithDuration:0.3 animations:^{
       
self.view.backgroundColor = [UIColor redColor];
       
self.testName = @"sadgf";
    }];
   
// 这里不需要 __weak
   
dispatch_async(dispatch_get_main_queue(), ^{
       
self.view.backgroundColor = [UIColor blueColor];
       
self.testName = @"dddd";
    });
   
   
// 这里需要 __weak
   
__weak typeof(self) wSelf = self;
   
testBlock2 = ^(NSString *str) {
       
NSLog(@"===%@",wSelf.testName);
    };
   
   
// 测试调用
   
if (self.testBlock) {
       
self.testBlock(@"测试");
    }
   
if (testBlock2) {
       
testBlock2(@"ddd");
    }
 
 void (^testTempBlock) (NSString * str);
   
// 这里不需要 __weak
    testTempBlock = ^(
NSString *str) {
       
NSLog(@"%@",self.testName);
    };
   
// 测试方法里面的block的调用
   
if (testTempBlock) {
        testTempBlock(
@"xiao");
    }

    // block里面有延迟的时候需要特殊处理

    self.testBlock = ^(NSString *str) {

    ToolDemoViewController *strongSelf = wSelf;

      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

          // 页面返回上个页面后,才执行,就会为空了。。。

          NSLog(@"name111===%@,,,%@",strongSelf.testName,str);

      });

    };

    if (self.testBlock) {

        self.testBlock(@"xiaoming");

    }

 

}
 
 
分享到:
评论

相关推荐

    ios-block循环引用的三种解决办法.zip

    本资料包“ios-block循环引用的三种解决办法.zip”旨在探讨这个问题并提供解决方案。 一、循环引用的概念与危害 循环引用发生在两个或多个对象彼此强引用,导致它们都不能被正常释放,即使它们已经不再使用。在...

    关于block的循环引用

    在iOS开发中,Block是一种强大的闭包特性,它允许...总结,理解和妥善处理Block的循环引用是iOS开发中的关键技能,它关系到应用的性能和稳定性。通过以上介绍,我们可以更好地识别和解决这类问题,确保代码健康高效。

    iOS Block使用教程

    7. **避免Block循环引用( retain cycle)** - 当Block内部引用了强引用自身实例的属性时,可能导致循环引用,应使用弱引用`__weak`来避免。 - 对于ARC环境下,可以使用`weakSelf`和`strongSelf`技巧来安全地访问...

    Block循环引用的问题

    然而,随着编程复杂性的增加,开发者经常遇到内存管理问题,其中之一就是"Block循环引用"。Block是OC中的一种强大的特性,它允许我们在代码中定义可重用的匿名函数。然而,如果不正确地使用,Block可能会导致内存...

    iOS block使用总结

    当Block作为对象的属性或者成员变量时,如果不小心可能会引起循环引用,导致内存泄漏。为了避免这种情况,可以使用`__weak`修饰符来弱引用self,或者使用`__unsafe_unretained`。 8. **Block与 ARC** 自动引用...

    iOS Block 的使用, 包括传值, 基本用法

    由于Block会捕获并持有其定义时的引用,因此可能导致循环引用,尤其是在ARC(Automatic Reference Counting)环境下。为了避免循环引用,可以使用弱引用`__weak`或强引用`__strong`来管理Block内的对象引用。 ### 7...

    iOS MRC 下 block 循环引用问题实例讲解

    下面一段代码给大家介绍iOS MRC 下 block 循环引用问题  //注意此__block会复制一份指针出来 一次原始的指针如果置为nil的话,此处复制出来的指针还是野指针 __block __typeof(self)weakSelf = self; //__weak _...

    iOS面试中如何优雅回答Block导致循环引用的问题

    在iOS面试中,面对关于Block导致循环引用的问题,你需要展现出深度理解和实践经验,而不仅仅是复述常见解决方案。首先,理解循环引用的基本概念至关重要:当两个对象互相强引用时,导致它们都不能被正确释放,这就...

    iOS Block 界面传值

    - id __block __weak:如果Block被复制到堆上,引用会变为弱引用,防止循环引用。 - Block __attribute__((__blocks__(byref))):Block被直接存储在堆上。 二、Block的声明与使用 1. Block声明:使用 "^" 符号...

    ios-把block当成属性放在全局字典中的用例.zip

    因此,使用时应谨慎处理Block中的强引用循环,确保及时释放不再使用的资源。 总的来说,这个示例提供了一种在iOS应用中方便地跨界面传递和执行Block的方法,减少了对代理模式的依赖,提高了代码的灵活性。然而,...

    ios Block和代理的对比

    代理需要定义协议,实现方法,有时还需要处理弱引用以避免循环引用。 3. **捕获能力**:Block能捕获和存储上下文中的变量,代理则不能。 4. **生命周期**:Block可以作为成员变量存储,其生命周期与对象相同;代理...

    iOS block实现,内存管理

    需要注意的是,Block捕获的自动变量如果是对象类型,会遵循ARC的强引用计数规则,可能导致循环引用问题。解决这个问题通常需要使用`__weak`或`__unsafe_unretained`关键字来弱引用捕获的对象。 总之,Block是...

    iOS的block回调

    但需要注意的是,如果Block引用了循环引用的对象,可能会导致内存泄漏。为了避免这种问题,可以使用弱引用(__weak)或无主引用(__unsafe_unretained)。 总的来说,iOS的Block回调使得代码更加简洁、易读,减少了...

    block的循环引用导致的内存泄露的示例及解决办法

    然而,如果不正确地使用Block,可能会导致循环引用(retain cycle),进而引发内存泄露。本文将深入探讨Block引起的循环引用问题,提供示例并分享解决方案。 一、什么是循环引用? 循环引用是指两个或多个对象互相...

    iOS block编程要点

    当block内部引用了Objective-C对象时,可能会发生循环引用的问题,尤其是当block被某个对象持有时。为了解决这个问题,开发者可以使用Block_copy和Block_release函数来管理block的内存。 总结起来,block为iOS开发...

    iOS block基础使用

    **iOS Block基础使用** 在iOS开发中,Block是一种强大的编程工具,它允许我们在代码中定义局部函数,可以作为参数传递,也可以...正确理解Block的生命周期、捕获变量、循环引用等问题,有助于编写出更健壮的iOS应用。

    ios block学习总结demo

    2. __weak Block:为防止循环引用,可以使用弱引用Block,但需要注意弱引用可能导致Block内部的变量提前释放。 3. __block变量:对于Block内部需要修改的局部变量,需要声明为`__block`类型,这样变量在Block内可以...

    ios-block反向传值.zip

    Block会捕获并保留其作用域内的对象,因此可能导致循环引用。为了避免这种情况,可以使用弱引用`__weak`或者`__unsafe_unretained`关键字。同时,如果Block在栈上创建,可能会被自动释放,需要将其复制到堆上以确保...

Global site tag (gtag.js) - Google Analytics