首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将@objc方法作为操作添加到按钮并获取“'#selector‘的参数不引用'@objc’方法、属性或初始值设定项”

将@objc方法作为操作添加到按钮并获取“'#selector'的参数不引用'@objc’方法、属性或初始值设定项”是一个编程中常见的错误提示。这个错误通常发生在使用Objective-C的语法和特性时,而编译器无法正确识别和处理。

首先,@objc是Objective-C的一个修饰符,用于将Swift中的方法、属性或类暴露给Objective-C代码。在Swift中,我们可以使用@objc修饰符来声明一个方法或属性,以便在Objective-C中使用。

当我们尝试将一个使用了@objc修饰符的方法作为操作添加到按钮时,我们需要使用#selector来引用这个方法。然而,编译器会在这种情况下发出警告或错误,提示我们参数不引用@objc方法、属性或初始化项。

这个错误通常是由于以下几种情况引起的:

  1. 方法名错误:请确保使用正确的方法名来引用@objc方法。方法名是区分大小写的,所以请确保大小写匹配。
  2. 方法不是@objc方法:请确保要添加到按钮的方法使用了@objc修饰符。如果方法没有使用@objc修饰符,编译器将无法正确识别和引用该方法。
  3. 方法不可见:请确保要添加到按钮的方法在当前作用域中可见。如果方法是私有的或在其他模块中不可见,编译器将无法引用该方法。
  4. 方法签名错误:请确保方法的参数和返回类型与按钮操作的期望相匹配。如果方法签名不匹配,编译器将无法正确引用该方法。

解决这个问题的方法包括:

  1. 确保方法使用了@objc修饰符,并且在当前作用域中可见。
  2. 检查方法名的拼写和大小写,确保与引用时一致。
  3. 检查方法的参数和返回类型,确保与按钮操作的期望相匹配。

如果以上方法都没有解决问题,可能需要进一步检查代码逻辑和上下文,以确定是否存在其他问题。

对于这个问题,腾讯云没有特定的产品或链接来解决,因为它是一个与云计算无关的编程错误。然而,腾讯云提供了丰富的云计算产品和服务,可以帮助开发人员构建和部署各种应用程序。您可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS开发·runtime原理与实践: 关联对象篇(Associated Object)(应用场景:为分类添加“属性”,为UI控件关联事件Block体,为了不重复获得某种数据)

本文中,第一节介绍关联对象及如何关联对象,第二节介绍关联对象最常用一个实战场景:为分类添加属性,第三节介绍关联对象另一个很重要实战场景:为UI控件(比如,UIAlertView以及UIButton...alertView参数据此选用相应逻辑。...创建完警告视图之后,设定一个与之关联“块”(block),等到执行delegate方法时再将其读出来。下面对此方案进行改进。...有没有办法让方法只执行一次,每次调用方法时候直接获得那一次执行结果?有的,方案就是让某个对象方法获得数据结果作为属性”与这个对象进行关联。...获取`类`属性 /** 参数 1> 类 2> 属性计数指针 */ unsigned int count = 0; // 返回值是所有属性数组

2.5K20

iOS开发·runtime原理与实践: 基本知识篇(类,超类,元类,super_class,isa,对象,方法,SEL,IMP)

( Method m ); // 获取方法返回值类型字符串 char * method_copyReturnType ( Method m ); // 获取方法指定位置参数类型字符串 char...m ); // 通过引用返回方法指定位置参数类型字符串 void method_getArgumentType ( Method m, unsigned int index, char *dst,...struct objc_selector *SEL; 在源码中没有直接找到 objc_selector 定义,从一些书籍上与 Blog 上看到可以 SEL 理解为一个 char* 指针。...操作函数 // 返回给定选择器指定方法名称 const char * sel_getName ( SEL sel ); // 在Objective-C Runtime系统中注册一个方法方法名映射到一个选择器...指向方法selector指针与该字段做一个AND位操作(index = (mask & selector))。这可以作为一个简单hash散列算法。

1.3K40

Objective-C Runtime:深入理解类与对象

其实最主要表现就是Objective-C很多静态语言在编译和链接时做事情放到了运行时去做,它在运行时实现了对类、方法、成员变量、属性等信息管理机制。...类操作方法大部分是以class_ 为前缀,而对象操作方法大部分是以objc_object_为前缀,具体以分类形式进行讨论。...2、属性相关操作函数: // 获取指定属性 objc_property_t class_getProperty ( Class cls, const char *name ); // 获取属性列表...函数:销毁一个类实例,但不会释放移除任何与其相关引用; 实例操作函数 实例操作函数主要是针对我们创建实例对象一系列操作函数。...类B通过添加一些额外属性来扩展类A。现在我们创建了一个A类实例对象,希望在运行时这个对象转换为B类实例对象,这样可以添加数据到B类属性中。

1.2K40

NSObject头文件解析 消息机制 Runtime解读 (一)

Class类作为成员变量, 稍后我们再具体看看Class头文件 } //load & initilize方法我们不常用到, 进一步说明大家可以看下这个地址:http://www.cocoachina.com...标记属性是Ojective-C 2.0不支持,但实际上可以用响应函数获取这些属性,具体有哪些响应函数大家可以导入后输入class_get...看看 例如:如果想要获取...(也可以还带有参数), 对象接收到消息后会先在cache中找之前调用记录, 在调用记录中找到了该方法就直接运行, 找不到就去方法列表去找 还找不到就去父类去找 如果找到顶层还是没有, 一般情况下在我们没有进行任何操作时候会...crash 如果要对没有实现方法调用做一些操作, 就可以在动态解析/重定向/消息转发中来做处理, 在其中任何一个阶段有处理该方法调用就不会crash 更详细用法之前讲过, 请看: http://www.cnblogs.com...72477] 打印成员变量初始值: (null) 2017-02-02 11:41:28.161 RunTimeDemo[1271:72477] 打印修改后成员变量值: nihao 获取实例方法: Method

1.1K31

2020-iOS最新面试题解析—1(原理篇)

,那么可以执行比较耗时操作; 如果在主线程发通知,那么就不可以执行比较耗时操作 runtime 如何实现 weak 属性 首先要搞清楚weak属性特点 weak策略表明该属性定义了一种“非拥有关系...为这种属性设置新值时,设置方法既不保留新值,也释放旧值。...用 weak 指向对象内存地址作为 key,当此对象引用计数为0时候会调用对象 dealloc 方法, 假设 weak 指向对象内存地址是a,那么就会以a为key,在这个 weak hash表中搜索...函数第一个参数self * 第二个成员是记录当前类父类是什么,告诉程序从父类中开始找方法,找到方法后,最后内部是使用 objc_msgSend(objc_super->receiver, @selector...以及参数类型,其实selector本质就是方法名称,通过这个方法名称就可以在方法列表中找到对应方法实现.

1.6K21

Objective-C Runtime 详解

PS:任性的话可以在Category中添加@dynamic属性利用运行期动态提供存取方法干脆动态转发;或者干脆使用关联度对象(AssociatedObject) 其中objc_ivar_list...但此时获取属性名是不带下划线,得到属性或者变量名后我们就可以使用KVC去修改访问类中私有属性变量。所以OC中没有真正意义上私有变量,私有方法也是。...我们可以实现forwardInvocation:方法来对不能处理消息做一些默认处理,也可以消息转发给其他对象来处理,而抛出错误。...( id object ); 这些方法以键值对形式动态地向对象添加、获取删除关联值。...dispatch_once 是GCD中一次性方法,它保证了代码块只执行一次,让其为一个原子操作,线程安全是很重要

1.1K20

Objective-C对象引用

您可能想要引用一个对象而不妨碍对象本身回收。对于这种情况,您可以获取一个“弱”引用。弱引用是通过存储一个指向对象指针创建,而不是保留对象。...强引用(持有对象Retain):当前对象被其他对象引用时,会执行retain操作引用计数器+1。...二、循环引用 对象 A 和对象 B,相互引用了对方作为自己成员变量,只有当自己销毁时,才会将成员变量引用计数减 1。...不会在属性清空后引用指针清空,这会造成野指针,所以是由风险去访问一个已经被清除对象。...但是我们可以用另外一种方法来关联一个weak属性,那就是强关联一个对象,然后让这个对象来弱引用这个属性

79320

Objective-C Runtime详解

PS:任性的话可以在Category中添加@dynamic属性利用运行期动态提供存取方法干脆动态转发;或者干脆使用关联度对象(AssociatedObject) 其中objc_ivar_list...但此时获取属性名是不带下划线,得到属性或者变量名后我们就可以使用KVC去修改访问类中私有属性变量。所以OC中没有真正意义上私有变量,私有方法也是。...我们可以实现forwardInvocation:方法来对不能处理消息做一些默认处理,也可以消息转发给其他对象来处理,而抛出错误。...( id object ); 这些方法以键值对形式动态地向对象添加、获取删除关联值。...dispatch_once 是GCD中一次性方法,它保证了代码块只执行一次,让其为一个原子操作,线程安全是很重要

1.7K60

面经之《招聘一个靠谱iOS》import CYLBlockExecutor.himport CYLBlockExecutor.himport CYLNSObject+RunAtDeallo

举个例子,假如 CYLUser 中含有一个数组,与其他 CYLUser 对象建立解除朋友关系那些方法都需要操作这个数组。那么在这种情况下,你得把这个包含朋友对象数组也一拷贝过来。...我们可以设计一个函数(伪代码)来表示上述机制: objc_storeWeak(&a, b)函数: objc_storeWeak函数把第二个参数--赋值对象(b)内存地址作为键值key,第一个参数--...下面分别介绍下方法内部实现: objc_initWeak函数实现是这样:在“附有weak修饰符变量(obj1)”初始化为0(nil)后,会将“赋值对象”(obj)作为参数,调用objc_storeWeak...函数0(nil)作为参数,调用objc_storeWeak函数。...... */ objc_storeWeak(&obj1, 0); objc_storeWeak 函数把第二个参数--赋值对象(obj)内存地址作为键值,第一个参数--weak修饰属性变量(obj1

966100

神奇Runtime

指针), 调用方法选标 SEL (方法名),以及不定个数方法参数返回一个id。...否则 4、寻找父类method list,依次往上寻找(会找到NSObject),直到找到selector,填充到缓存中,返回selector,否则 动态解析,这里动态添加方法 5、如果找到可以动态...,缓存,方法返回,否则 消息快速转发,这里消息分配给其他对象处理 6、消息转发机制执行前,Runtime 系统允许我们替换消息接收者为其他对象。...:消息,以创建NSInvocation对象作为参数; 若methodSignatureForSelector:无方法签名返回,则向当前对象发送doesNotRecognizeSelector:消息,程序抛出异常退出...通过这种方法来模拟生成属性,但是与对象还是有点区别,因为对象属性会编译器自动生成setter和getter方法,会默认给你生成一个以下划线开头成员变量,而category手动去生成setter和getter

57220

iOS-RunTime,不再只是听说

使用运行时,发送消息需要导入框架并且xcode5之后,苹果建议使用底层方法,如果想要使用运行时,需要关闭严格检查objc_msgSend调用,BuildSetting...(eat)); // 带参数 objc_msgSend(p, @selector(eat:),10); 类方法调用底层 // 本质是会将类名转化成类对象,初始化方法其实是在创建类对象。...实例方法[p eat];底层调用[p performSelector:@selector(eat)];方法,编译器在代码转化为objc_msgSend(p, @selector(eat)); 在objc_msgSend...每一个方法都默认带有两个隐式参数 self : 方法调用者 _cmd : 调用方法标号,可以写也可以写。...参数二:void * == id key : 属性名,根据key获取关联对象属性值,在objc_getAssociatedObject中通过次key获得属性返回。

1.2K70

Swift编译之SIL(Swift Intermediate Language)

witness_method:通过 Protocol Witness Table(PWT) 获取对应方法引用地址。 objc_method:获取 Objective-C 方法引用地址。...@方法名:某个方法名字。 @_hasStorage:存储属性。 @_hasInitialValue:属性初始值。 @owned:方法接收者负责销毁返回值。...,方法导出到Objective-C,启用动态派发 @objc dynamic func say() // 没有@objc标记普通方法 func doSomething()...:表示这个表达式是隐藏,即不对外部可见 // [transparent]:表示这个表达式是透明,即包含额外控制流操作 // @variable initialization expression...方法调用约定,其中@yield_once表示该方法会产生一次yield modify 方法通常用于实现属性写时拷贝,在获取属性时会执行一些操作,并在修改时生成一个拷贝 // @convention(

19141

iOS16 和 Xcode14 如何改进 App 大小和运行时性能

其实可以看到这里几乎每一行都要一条指令来调用 objc_msgSend, 即使是对日期属性访问(属性 setter 方法)。...每个类都有一张方法列表来存储这个类方法列表,当调用 objc_msgSend 时,就会通过参数去这个对应对应方法列表中查找,先在cache 中查找,然后在方法列表中查找,如果当前类找不到,就往上找父类...在高代码层面(比如业务层面,应用层),当我们复制指向某个对象指针时,需要增加对象引用计数,让该对象保持活跃引用状态(copy方法就会做这个事)。...操作推迟到稍后某个时间方法。..., 我们返回一个立即被持有(retain) 临时变量(theWWDCDate),这让我们可以省略删除正在匹配 autorelease 和 retain 调用。

3.7K30

深入浅出 Runtime(二):数据结构

isa操作相关 弱引用相关 关联对象相关 内存管理相关 ... */ }; 2. objc_class Class指针用来指向一个 Objective-C...oldCapacity = capacity(); // ⚠️缓存扩容为原来两倍,如果是首次调用,设置缓存容量初始值为 4 uint32_t newCapacity = oldCapacity...,请查看: 深入浅出 Runtime(三):消息机制 3. isa 指针 isa指针用来维护对象和类之间关系,确保对象和类能够通过isa指针找到对应方法、实例变量、属性、协议等; 在 arm64...(返回值类型、参数类型) IMP imp; // 方法地址/实现 }; 4.1 SEL SEL 又称“选择器”,它是一个指向方法selector指针,代表方法/函数名; SEL 维护在一个全局...,把一个方法返回值类型、参数类型通过字符串形式描述; @encode()指令可以类型转换为 Type Encodings 字符串编码, 如@encode(int)=i; OC方法都有两个隐式参数

73210

iOS_Runtime是什么?原理?作用?怎么实现weak?使用

就是在程序运行过程中,有一套C语言级别的API,它把代码从OC转换成C 2、原理: OC是基于C,添加了面向对象特性,很多静态语言在编译和链接时做事放到了runtime运行时来处理 C:函数调用在编译时就知道会调用哪个函数...OC:在编译时候并不知道,只在正在运行时才会根据函数名称找到对应函数 3、作用 获取属性方法、成员变量、协议(包括私有的) 给分类动态添加属性方法 字典转模型 拦截替换方法 实现NSCoding...当对象引用计数为0时会调用dealloc方法,此时会在weak表中搜索,所有weak对象置为nil。...Key:对象内存地址 — value:n个weak对象 5、使用 替换ViewController生命周期方法 解决获取索引、添加、删除元素越界crash问题 防止按钮重复暴力点击 全局更换控件初始效果...} // 还有些属性,没添加,详情见Demo `UILabel``Category`中拦截初始化方法设置font // UILabel+Swizzling.m + (void)load {

33920

Objective-C Runtime编程指南(1)

这意味着该语言不仅需要编译器,还需要运行时系统来执行编译代码。运行时系统作为Objective-C语言一种操作系统来使得Objective-C工作。...编译器会将一个下面的一个消息表达式 [receiver message] 转变成一个消息函数 objc_msgSend,这个函数接收者和消息中提到方法名称(即方法selector作为其两个主要参数...如果在那里找不到selectorobjc_msgSend跟随指向超类指针,尝试在其派发表中找到selector。...规避动态绑定唯一方法获取方法地址,直接调用它,就像它是一个函数一样。...Objective-C方法只是一个C函数,它至少需要两个参数self和_cmd。 您可以使用函数class_addMethod函数添加到类中。

74520

runtime官方文档翻译版本通过OC源代码通过NSObject中定义方法直接调用运行时函数消息传递机制使用隐藏参数获取方法地址动态方法解析动态加载消息转发转发和多继承代理对象转发和继承类型编码声

这个函数接收者和在消息中提到方法名(方法选择器)作为两个主要参数objc_msgSend(receiver, selector)。...当代码被编译时候它们被插入实现中。 虽然这些参数没有被显式声明,源代码仍然可以引用他们(就像它可以接收实例变量一样)一个方法引用接收对象作为自己,引用他自己方法选择器作为_cmd。...在下面的实例中,_cmd引用strange方法选择器,自己作为strange消息接收对象。 ? 图 Self比两个参数更有用。事实上,这是接收对象实例变量提供了方法定义方式。...消息转发 如果你给一个处理这个消息对象发送消息,在认识到时一个错误之前运行时会给对象发送一个带有NSInvocation对象作为唯一参数forwardInvocation:消息。...这个类型可以是任何类型,可以是基本类型,如int型指针,可以是一个标记结构联合,类名,可以被C语言sizeof()运算符作为参数使用。 下面的表格列出了编码类型。

1.5K70
领券