当前位置: 首页 > 编程笔记 >

Objective-C语言块作为属性

吕皓
2023-03-14
本文向大家介绍Objective-C语言块作为属性,包括了Objective-C语言块作为属性的使用技巧和注意事项,需要的朋友参考一下

示例

@interface MyObject : MySuperclass

@property (copy) void (^blockProperty)(NSString *string);

@end

分配时,由于selfretains blockProperty,block不应包含对self的强引用。这些相互强引用被称为“保留周期”,将防止释放任何一个对象。

__weak __typeof(self) weakSelf = self;
self.blockProperty = ^(NSString *string) {
    //在这里仅参考weakSelf。自我会导致保留周期
};

这是极不可能的,但self可能会在执行过程中的某个位置释放到块中。在这种情况下,weakSelf变为nil并发送给它的所有消息都不会产生预期的效果。这可能会使应用程序处于未知状态。这可通过保持可避免weakSelf与__strong块执行和清理之后期间的ivar。

__weak __typeof(self) weakSelf = self;
self.blockProperty = ^(NSString *string) {
    __strong __typeof(weakSelf) strongSelf = weakSelf;
    // 在此仅提及strongSelf。
    // ...
    // 执行结束时,清理引用
    strongSelf = nil;
};
           

 类似资料:
  • Objective-C Runtime Runtime 是什么? Runtime 是 Objective-C 区别于 C 语言这样的静态语言的一个非常重要的特性。对于 C 语言,函数的调用会在编译期就已经决定好,在编译完成后直接顺序执行。但是 OC 是一门动态语言,函数调用变成了消息发送,在编译期不能知道要调用哪个函数。所以 Runtime 无非就是去解决如何在运行时期找到调用方法这样的问题。 对

  • 本文向大家介绍Objective-C语言创造,包括了Objective-C语言创造的使用技巧和注意事项,需要的朋友参考一下 示例 要么 或使用适当的文字语法            

  • 推荐首先阅读 内存管理 Objective-C 中的内存分配 在 Objective-C 中,对象通常是使用 alloc 方法在堆上创建的。 [NSObject alloc] 方法会在对堆上分配一块内存,按照NSObject的内部结构填充这块儿内存区域。 一旦对象创建完成,就不可能再移动它了。因为很可能有很多指针都指向这个对象,这些指针并没有被追踪。因此没有办法在移动对象的位置之后更新全部的这些指

  • 本文向大家介绍Objective-C语言XML解析,包括了Objective-C语言XML解析的使用技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍Objective-C语言返回值,包括了Objective-C语言返回值的使用技巧和注意事项,需要的朋友参考一下 示例 当要从方法返回值时,请将要返回的类型放在第一组括号中。 您要返回的值放在return关键字之后;

  • 本文向大家介绍Objective-C语言记录中,包括了Objective-C语言记录中的使用技巧和注意事项,需要的朋友参考一下 示例 的第一个参数NSLog是,NSString包含日志消息格式。其余参数用作替代格式说明符的值。 格式与完全相同printf,除了用于%@任意Objective-C对象的附加格式说明符。这个: 等效于: