self & _cmd】的更多相关文章

NSStringFromSelector(_cmd); // Objective-C print(__FUNCTION__) // Swift 2 print(#function) // Swift 3 __FILE__, __LINE__, __COLUMN__ and __FUNCTION__ => #file, #line, #column and #function…
[self class] 返回当前类名 [self _cmd] 返回当前方法名 self 是类的隐藏的参数,指向当前当前调用方法的类 另一个隐藏参数是_cmd,代表当前类方法的selector…
实际上是该方法名(@selector的名称). 比如: - (void)someCategoryMethod { NSString *string = objc_getAssociatedObject(self, _cmd); if(!string){ string = @"string"; objc_setAssociatedObject(self, _cmd, string, OBJC_ASSOCIATION_COPY_NONATOMIC); } } _cmd实际上是someCat…
1. - (CustomNavigationControllerDelegate *)customDelegate { return objc_getAssociatedObject(self, _cmd); } - (void)setCustomDelegate:(CustomNavigationControllerDelegate *)customDelegate { objc_setAssociatedObject(self, @selector(customDelegate), cust…
IMP IMP-指向实际执行函数体的函数指针 #if !OBJC_OLD_DISPATCH_PROTOTYPES typedef void (*IMP)(void /* id, SEL, ... */ ); #else typedef id (*IMP)(id, SEL, ...); #endif 可以看到,这个函数体前两个参数是 id(消息接受者,也就是对象),以及SEL(方法的名字) method/objc_method method - 指向Objective C中的方法的指针 typed…
一,关联 objc_get 1)建立关联:objc_setAssociatedObject:该函数需要四个参数:源对象,关键字,关联的对象和一个关联策略:当源对象销毁,关联的对象也会被销毁 源对象: 即绑定者 关键字: 是一个void类型的指针.每一个关联的关键字必须是唯一的.通常都是会采用静态变量来作为关键字 关联的对象: 绑定到源对象身上的对象 关联策略: 表明了相关的对象是通过赋值,保留引用还是复制的方式进行关联的:还有这种关联是原子的还是非原子的.这里的关联策略和声明属性时的很类似.这种…
1._cmd是隐藏的参数,代表当前方法的selector,他和self一样都是每个方法调用时都会传入的参数,动态运行时会提及如何传的这两个参数, 你在方法里加入CCLOG(@\"%@, %@\",NSStringFromSelector(_cmd),self); 2.跟踪输出:在语句之后,上述方法就会输出方法的名称, 这样做是为了跟踪查看方法调用的前后顺序,或者想看看程序到底在那个方法内部崩溃的!…
The only way to circumvent dynamic binding is to get the address of a method and call it directly as if it were a function. This might be appropriate on the rare occasions when a particular method will be performed many times in succession and you wa…
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtHowMessagingWorks.html#//apple_ref/doc/uid/TP40008048-CH104-SW1 When objc_msgSend finds the procedure that implements a method, it calls the proc…
在windows下编译java,由于是临时测试一下文件,不想改classpath,就在命令行中用 -cp 或classpath引入jar包,用javac编译成功,便使用java带-cp 或classpath运行类是却失败,提示“找不到或无法加载主类”,我的java源文件没有包名. H:\temp6\project\src>javac  -cp   dom4j-1.6.1.jar  XmlTest.java H:\temp6\project\src>H:\temp6\project\src>…
1.资料: 1.1.Windows10下设置Shift+右键增加cmd - wyx0712的博客 - CSDN博客.html(https://blog.csdn.net/wyx0712/article/details/82120806) ZC:这里弄的 注册表 表项较多,我感觉值需要使用 下面这篇文章中的就可以(没有测试,不能确定...) Windows Registry Editor Version 5.00 [-HKEY_CLASSES_ROOT\Directory\Background\s…
iOS 后台处理的常见用途 1.进入后台时候删除资源:应用处于挂起状态的时候所占用的资源越少,该应用被iOS终止的风险就越低.通过从内存中清理那些易于重新创建的资源,可以增加应用驻留内存的机会,因此可以大幅加快重启速度. 2.进入后台时候保存状态:保存与用户执行的操作相关的所有信息,这样的话,用户下次回来的时候,依然可以恢复到他们离开时的进度. 3.延时执行,请求更多的后台时间:如果进入后台花费了很多时间,应用可能会从内存中移除,如果应用正在进行文件传输,没有能够完成的话,将会带来很多不便.我们…
OC中调用方法某个对象的消息呦两种方式: #1. performanceSelector: withObject: #2. NSInvocation. 第一个PerformaceSelector比较常用, 也比较简单. 但是这个方式最多只能传递2个参数 当需要2个以上参数时就只能用NSInvocation了 直接上代码吧, 会注释清楚 - (void)viewDidLoad { [super viewDidLoad]; //用performanceSelector调用三个参数的方法, 但只传递2…
Objective-C Runtime Describes the macOS Objective-C runtime library support functions and data structures.   Overview(概述)   以下是官方文档中对Runtime给出的定义 The Objective-C runtime is a runtime library that provides support for the dynamic properties of the Obj…
NSAssert和assert是断言,主要的差别是assert在断言失败的时候只是简单的终止程序,而NSAssert会报告出错误信息并且打印出来.所以尽管的使用NSAssert,可以不去使用assert. iOS中用的最多的是两对断言, NSAssert/NSCAssert 和 NSParameterAssert/NSCparameterAssert. 要知道他们的区别,我们先来看看他们定义. #if !defined(NS_BLOCK_ASSERTIONS) #if !defined(_NSA…
本篇是AFNetworking 3.0 源码解读的第五篇了. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager AFNetworking 3.0 源码解读(二)之 AFSecurityPolicy AFNetworking 3.0 源码解读(三)之 AFURLRequestSerialization AFNetworking 3.0 源码解读(四)之 AFURLResponseSerialization 这次主要介绍AFURLSessi…
用Objective-C等面向对象语言编程时,"对象"(object)就是"基本构造单元"(building block).开发者可以通过对象来存储并传递数据.在对象之间传递数据并执行任务的过程就叫做"消息传递"(Messaging).当程序运行起来以后,为其提供相关支持的代码叫做"Objective-C运行期环境"(Objective-C runtime),它提供了一些使得对象之间能够传递消息的重要函数,并且包含创建类实例所…
好久之前就看到过使用Runtime解决按钮的连续点击的问题,一直觉得没啥好记录的.刚好今天旁边同时碰到这个问题,看他们好捉急而且好像很难处理,于是我先自己看看… 前面自己也学习了很多Runtime的东西,一直觉得这个按钮连续点击其实很简单,就使用Runtime交换SEL实现IMP即可,但其实没明白解决这个问题的过程. 虽然直接可以在github搜到解决方法,但是还是有必要学习一下解决这个问题的一步一步的思路,给出这个作者的git: https://github.com/strivever/UIB…
objC语言不仅仅有着面向对象的特点(封装,继承和多态),也拥有类似脚本语言的灵活(运行时),这让objC有着很多奇特的功能-可在运行时添加给类或对象添加方法,甚至可以添加类方法,甚至可以动态创建类... [TOC] 运行时 runtime,即运行时,这里不详述其概念,我们可以类比java和javascript语言,它们也都有运行时环境.java运行时是和编译阶段相独立的过程,可以理解java字节码在虚拟机中解释执行的阶段的由虚拟机提供的相关引用(gc,存储等)的环境:而js运行时则更为特殊,由…
////  RootViewController.h//  DSCategories////  Created by dasheng on 15/12/17.//  Copyright © 2015年 dasheng. All rights reserved.//#import <UIKit/UIKit.h>@interface RootViewController : UITableViewController@end ////  RootViewController.m//  DSCate…
输入网址,解出源码,显示label 我这里是在第二个界面显示的,用的属性传值. A界面先从 storyboard 拖个 textfield 和一个 button .m里面button的方法 //按钮点击方法 - (IBAction)Click:(id)sender { //前缀 NSString *str1 = @"http://"; //把前缀加到你输入的网址前 NSString *str2 = [str1 stringByAppendingString:_field.text];…
LLDB基础知识 LLDB控制台 Xcode中内嵌了LLDB控制台,在Xcode中代码的下方,我们可以看到LLDB控制台. LLDB控制台平时会输出一些log信息.如果我们想输入命令调试,必须让程序进入暂停状态.让程序进入暂停状态的方式主要有2种: 断点或者watchpoint: 在代码中设置一个断点(watchpoint),当程序运行到断点位置的时候,会进入stop状态 直接暂停,控制台上方有一个暂停按钮,上图红框已标出,点击即可暂停程序 LLDB语法 在使用LLDB之前,我们来先看看LLDB…
Category: 1. 无法添加实例变量 2.将类的实现分散到多个不同文件或多个不同框架中. Extension: 1. 可以添加实例变量 注: 如果Category的头文件中也使用Extension(即将 @interface MyData (XX)改为@interface MyData() ),依然不能使用变量. 千万不要认为在任何地方使用Extension,编译器都会将变量放进来. 但是如果MyData.m中,包含以下MyData+XX.h,那就可以运行通过. 所以什么情况下内存会将变量…
随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分.但是仅仅完成代码拆分还不足以解决业务之间的代码耦合,为了更好的让拆分出去的业务工程能够独立运行,必须进行组件拆分并且实现组件服务化. 下面是最近在行业内几个大神的博客辩论对战,具体资料如下: 2016.03.10 蘑菇街App的组件化之路 2016.03.13 iOS应用架构谈 组件化方案 2016.03.14 蘑菇街App的组件化之路·续 2016.03.…
AVPlayer     AVPlayerLayer是CALayer的一个子类,由于AVPlayer这个播放器只能安置在AVPlayerLayer 这个图层之上,所以我们需要实例化一个UIView,并且修改它默认生成的图层类型(默认是CALayer,不具备安置AVPlayer的功能)            1.修改UIView自带的CALayer类型    +(Class)layerClass    2.媒体对象    AVPlayerItem        3.通过KVO来观察AVPlayer…
接上一篇http://www.cnblogs.com/ddavidXu/p/5924049.html 转载来源http://www.jianshu.com/p/6b905584f536 http://southpeak.github.io/2014/10/30/objective-c-runtime-2/ 方法和消息  OC中对象调用方法,实际是给对象发送消息 SEL又叫选择器,是表示一个方法的selector的指针,其定义如下: typedef struct objc_selector *SE…
接上一篇 http://www.cnblogs.com/ddavidXu/p/5912306.html 转载来源http://www.jianshu.com/p/6b905584f536 http://southpeak.github.io/2014/10/30/objective-c-runtime-2/ 比较实用的内容都用颜色的字标记,并配有代码,并在末尾放上代码demo. 类型编码(Type Encoding) Objective-C不支持long double类型.@encode(lon…
http://southpeak.github.io/2014/10/25/objective-c-runtime-1/ 转载http://www.jianshu.com/p/6b905584f536 http://www.jianshu.com/p/b827c5000924 1.OC是一门动态语言,将很多静态语言在编译和链接时期做的事放到了运行时来处理. 动态语言的优势在于:写代码更具灵活性,可以把消息转发给我们想要的对象.或者随意交换一个方法等 所以OC不仅需要一个编译器,还需要一个运行时系…
1 webView----->js #import "ViewController.h" @interface ViewController () @property (nonatomic ,strong)UIWebView *myWeb; @property (nonatomic ,strong)NSString *someString; @end @implementation ViewController - (void)viewDidLoad { [super viewD…
int main() { Person *p = [[Person alloc] init]; //调用方法 [p test2]; [p performSelector:@selector(test2)]; ; } #import "Person.h" @implementation Person + (void)test { NSLog(@"test-----"); } - (void)test2 { // _cmd代表着当前方法 NSString *str =…