`
啸笑天
  • 浏览: 3461180 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

swift objc_setAssociatedObject block(version1.2 xcode6.4)

 
阅读更多

 

import UIKit

class LSObjectWrapper: NSObject {
    let value: ((barButton: UIButton?) -> Void)?
    
    init(value: (barButton: UIButton?) -> Void) {
        self.value = value
    }
}

 

    private var LSActionBlockKey = 0

    var actionBlock:((barButton: UIButton?) -> Void)?{
        get{
            let wrapper:LSObjectWrapper? = objc_getAssociatedObject(self, &LSActionBlockKey) as? LSObjectWrapper
            let block = wrapper?.value
            return block;
        }
        set{
            let wrapper = LSObjectWrapper(value: newValue!)
                objc_setAssociatedObject(self, &LSActionBlockKey, wrapper, objc_AssociationPolicy(OBJC_ASSOCIATION_RETAIN_NONATOMIC))
        }
    }

 

weak等类型类似

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    iOS-OC-Runtime使用小谈(objc_setAssociatedObject)

    本文将深入探讨`objc_setAssociatedObject`这一Runtime函数,它是OC关联对象的主要实现方式。 `objc_setAssociatedObject`是Objective-C Runtime库中用于绑定一个对象到另一个对象的一个函数,它允许我们在不修改...

    实战 objc_setAssociatedObject

    在iOS开发中,`objc_setAssociatedObject`是一个非常重要的API,它允许我们在运行时为对象添加关联对象。这个API在不扩展类或者使用KVC(Key-Value Coding)的情况下,提供了一种为对象添加额外属性的方式。这篇实战...

    通过 objc_setAssociatedObject (关联) 的形式实现为Category (类别) 添加属性

    然而,我们可以通过Objective-C的运行时API(Runtime)来实现这一目标,特别是利用`objc_setAssociatedObject`方法,它允许我们在运行时将数据与任何对象关联起来。下面我们将深入探讨如何通过`objc_...

    [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObjec

    这就是 `objc_setAssociatedObject`、`objc_getAssociatedObject` 和 `objc_removeAssociatedObjects` 这三个函数的作用,它们提供了关联对象的能力。 `objc_setAssociatedObject` 函数用于设置关联对象。它的基本...

    iOS关联objc_setAssociatedObject

    iOS-关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects) 详解请参考:http://blog.csdn.net/u014220518/article/details/71750875

    objective c 消息 objc_msgSend

    在Objective-C中,消息传递是实现对象间通信的核心机制,`objc_msgSend`函数就是这个机制的底层实现。本文将深入探讨`objc_msgSend`以及与其相关的`performSelector`方法,并通过实例来阐述它们的工作原理和用法。 ...

    Xcode 真机调试 iOS 16.0

    在iOS应用开发中,Xcode是苹果官方的集成开发环境(IDE),用于编写、测试和发布iOS、iPadOS、macOS、watchOS以及tvOS的应用。随着iOS系统版本的更新,开发者需要确保他们的应用程序能够兼容最新的操作系统。在这个...

    RuntimeTest添加属性

    在这个项目中,我们将深入探讨`objc_setAssociatedObject`和`objc_getAssociatedObject`这两个API的用法,以及它们在实际开发中的应用。 1. **Runtime简介** Objective-C的Runtime系统是它区别于其他静态类型语言...

    XCode 15.3 编译私有库 报错问题

    1. **编译器版本差异**:新版本Xcode可能使用了不同的LLVM编译器或者Swift版本,导致编译指令不被老版库识别。 2. **API变化**:Apple经常更新其SDK,可能会废弃或修改某些函数,使得旧库中的调用无效。 3. **架构...

    NSDecimalNumber用法加减乘除解决字符串转float类.pdf

    NSDecimalNumber 用法加减乘除解决字符串转float...NSDecimalNumber、单链表、Objective-C 和 objc_setAssociatedObject 是 iOS 开发中的基础知识和技术,掌握这些知识和技术,可以帮助开发者更好地开发 iOS 应用程序。

    Objective-C Associated Objects 的实现原理.pdf

    这项技术在使用时涉及三个关键的函数:objc_setAssociatedObject、objc_getAssociatedObject和objc_removeAssociatedObjects。这些函数能够让我们通过runtime进行底层操作,将一个对象和另一个对象进行关联。 objc_...

    swift-跟踪objcmsgSendTrackobjcmsgSend

    通过在Xcode的scheme中启用Swift Language Version debugging,可以在控制台看到更详细的Swift运行时信息。 6. **第三方库**: 有一些第三方库如Locus(压缩包中的locus-master可能就是这个库)提供了跟踪方法调用...

    专业版iOS混淆工具,马甲工具过机器审核,支持语言 c_c++_objc_objc++_swift 支持各种资源改名,混淆

    专业版iOS混淆工具,马甲工具,提供试用版本,过机器审核,支持语言 c_c++_objc_objc++_swift 支持各种资源改名,混淆、一键出包,提供良好的UI界面,支持多包管理一包一特征,解决4.3问题.zip

    cpp-objcmsgSendHook精简学习过程

    `objc_msgSend`函数是这个机制的核心,它负责查找并执行对象的方法。本文将深入解析`objc_msgSend`的钩子(hook)技术,这是一项关键的黑盒调试和性能分析工具,也常用于诸如Method Swizzling等高级编程技巧。 `...

    复杂数据类型变量的引用计数与block以及__block修饰符的关系

    这里我们将深入探讨复杂数据类型变量的引用计数、Block以及`__block`修饰符之间的关系。 首先,了解引用计数是理解整个话题的基础。在Objective-C中,每个对象都有一个引用计数,表示有多少个指针指向它。当对象的...

    XCode工程中代码计算图片资源是否在使用,以及项目中引用的本地图片是否存在_objc_-calculateImages.zip

    XCode工程中代码计算图片资源是否在使用,以及项目中引用的本地图片是否存在_objc_-calculateImages

    Runtime使ViewController具有name属性

    这里使用了`objc_setAssociatedObject`和`objc_getAssociatedObject`这两个Runtime函数,将`name`属性与ViewController对象关联起来,实现了属性的存取。 2. **Associated Objects**: 上述Category中,我们使用了...

    googleads_mobile_ios_objc_api_demo.zip

    在 iOS 应用中使用 AdMob,首先需要在 Xcode 项目中添加 AdMob 的 SDK。这通常通过 CocoaPods 或手动下载库完成。对于 Objective-C 项目,我们需引入 `Google-Mobile-Ads-SDK` 框架。 3. **创建广告单元 ID** 在 ...

    Xcode 10升级导致项目报错的常见问题解决

    Xcode 10升级导致项目报错的常见问题解决 本文主要介绍了Xcode 10升级导致项目报错的常见问题,并提供了详细的解决方法。文章中通过实践示例代码,详细介绍了各种报错问题的解决方案,对读者的学习或者工作具有一定...

    Type-Safe Associated Objects in Swift.zip

    在Swift的标准库中,我们可以使用`objc_setAssociatedObject`和`objc_getAssociatedObject`来创建关联对象,但这两种方法都是基于Objective-C的,并且在Swift中使用时缺乏类型安全。`swift-tsao`库解决了这个问题,...

Global site tag (gtag.js) - Google Analytics