代码之家  ›  专栏  ›  技术社区  ›  Piotr Czapla

如何在Objective-C中的属性中存储块?

  •  76
  • Piotr Czapla  · 技术社区  · 14 年前

    我想将objective-c块存储在一个属性中以备以后使用。我不知道该怎么做,所以我在谷歌上搜索了一下,关于这个主题的信息很少。但我终于找到了解决办法,我想这可能值得我这样的新手分享。

    最初,我认为需要手动编写属性才能使用Block-copy&Block-release。

    幸运的是我发现了 blocks are NSObjects - copy - release 相当于 Block_copy / Block_release . 所以我可以用 @property (copy)

    3 回复  |  直到 12 年前
        1
  •  135
  •   Dave DeLong    11 年前

    编辑:为圆弧更新

    typedef void(^MyCustomBlock)(void);
    
    @interface MyClass : NSObject
    
    @property (nonatomic, copy) MyCustomBlock customBlock;
    
    @end
    
    @implementation MyClass
    
    @end
    
    MyClass * c = [[MyClass alloc] init];
    c.customBlock = ^{
      NSLog(@"hello.....");
    }
    
    c.customBlock();
    
        2
  •  98
  •   Steven Kramer    13 年前

    或者,不使用typedef

    @property (copy, nonatomic) void (^selectionHandler) (NSDictionary*) ;

        3
  •  9
  •   Jorge Perez    12 年前

    @property(strong) my_block_type work;
    

    注意保持循环。一个很好的解决方法是在不再需要时将块设置为nil:

    self.work = nil;