objective-c 中如何在一个函数中调用自己类中的另外一个函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了objective-c 中如何在一个函数中调用自己类中的另外一个函数相关的知识,希望对你有一定的参考价值。
都在view controller里面的函数
Objective-c方法调用流程
Objective-c是一门动态语言,动态两个字主要就体现在我们调用方法的时候,运行时回动态的查找方法,然后调用相应的函数地址。运行时是整个Objective-c程序的基石,有了它我们的程序才能正常运行起来。
NSObject是Cocoa中绝大部分类的基类,它主要是提供了序列话,拷贝对象,以及支持运行时动态识别的框架。
在Objective-c中每一个类对象最开始的位置都会有一个isa指针,该指针指向一块内存区域,该部分主要包含两部分信息:
1、指向父类的指针。
2、自身的方法分发表。
有了这两部分,Objective-c的方法的调用流程就可以跑起来了。当我们调用一个对象的某一个方法的时候,首先会在当前类的分发表中寻找该方法,如果找不到对应的方法,然后再去其父类中寻找该方法,依次类推直到找到对应的方法为止,流程图如下:
你可能会想到,如果一个类有很深的继承层次,每次去调用根类的某个函数,岂不是都要做很多次查找。理论上是这个样子的,不过runtime也并非那么傻,它会为每一个类(不是对象)维护一个经常调用的方法的列表,只要调用过就会缓存起来(官方没有明确说明缓存机制),这样当程序运行稳定以后整个方法调用的过程就会更加高效。
通过学习官方文档Objective-C Runtime Programming Guide,可以发现其实所有的selector调用最后都会转化为C类型的函数调用。举个例子我们创建了一个A类型的对象aSample,然后调用其test方法([aSample test]),编译的时候,编译器就会将该调用转化为objc_send(aSample, selector)的形式,runtime会调用test方法实现所对应的函数地址。该函数的参数包含了两个隐含的参数self以及_cmd,其中self指向调用该方法的对象,_cmd则代表要调用的方法。
前面提到了NSObject提供了很多遍历的方法可以和运行时进行交互,其中有个方法methodForSelector,通过它我们可以直接获取到指定的方法对应的函数指针。通常我们直接使用Objective-c方式的方法调用就可以了,但有时程序中可能会频繁的调用某一个方法,为了提高效率。我们可以直接获取到方法对应的函数地址,然后直接调用该函数,这样就少了动态识别的时间。
参考技术A self.函数名 就ok了 参考技术B block回调 代理 通知中心 参考技术C [self 方法名:参数];本回答被提问者采纳如何在 Objective-C 中的 UITextField 中每次更改后调用一个动作?
【中文标题】如何在 Objective-C 中的 UITextField 中每次更改后调用一个动作?【英文标题】:How To call an Action after each changing in UITextField In Objective-C? 【发布时间】:2017-08-20 10:27:34 【问题描述】:我的应用中有一个搜索框。它的类是 UITextField 而不是 UISearchBar。我想将其设置为搜索栏。对于当时输入的每个字符串,使用该字符串执行 (void)Search 函数。但我不知道该怎么做。事实上,我想在输入每个字符后调用 (void)Search。
-(void)textFieldDidBeginEditing:(UITextField *)textField
[self Search];
-(void)textFieldDidEndEditing:(UITextField *)textField
[self Search];
【问题讨论】:
【参考方案1】:您可以使用 shouldChangeCharactersInRange 获取当前用户输入
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
NSString * searhQuery = [[textField text] stringByReplacingCharactersInRange:range withString:string];
[self Search:searhQuery];
return YES;
【讨论】:
shokran seyedi. @SaMiGiMiX 如果回答了您的问题,请将此答案标记为正确 @MohammadBashirSidani 我做了,但起初 8 分钟系统不允许我这样做。以上是关于objective-c 中如何在一个函数中调用自己类中的另外一个函数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Objective-C 中的 UITextField 中每次更改后调用一个动作?
如何从 Objective-C 中调用的 JavaScript 函数访问 response.body?
如何从objective-c方法调用我的phonegap ios应用程序中的javascript函数?
如何从 .m 函数获取结果到 .mm 类 Objective-C 与 Qt 混合