iOS 捕获未知方法的调用,避勉抛出异常

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

NSObject 对象是 Objecitve-C 中的根类,其有以下两个方法,在调用 NSObject 及其子类的方法不存在时,会将这个调用封装成 NSInvocation *
类型,试图传递给 forwardInvocation: 方法,如果原方法调用的对象重载了forwardInvocation: 方法,forwardInvocation: 方法就会被调用。

forwardingTargetForSelector: 的真正用途,从官网的描述中,还是未完全体会其可用的场景,只是后一方法在做反射处理时到时用到过,参见 “iOS
实现的 json 数据源的 O-R Mapping
”。

forwardingTargetForSelector:

返回未知消息首先应该转向的对象。

Returns the object to which unrecognized messages should first be directed.

- (id)forwardingTargetForSelector:(SEL)aSelector

forwardInvocation:

由子类重载,用于前转消息到其它对象。

Overridden by subclasses to forward messages to other objects.

- (void)forwardInvocation:(NSInvocation *)anInvocation

- (void)forwardInvocation:(NSInvocation *)invocation {

    SEL orignalSelector = [invocation selector];

    if ([friend respondsToSelector:orignalSelector]) {

        [invocation invokeWithTarget:friend];
    }

    else {

        [super forwardInvocation:invocation];
    }
}

iOS 捕获未知方法的调用,避勉抛出异常,布布扣,bubuko.com

时间: 2024-08-04 18:41:25

iOS 捕获未知方法的调用,避勉抛出异常的相关文章

[iOS]为什么不要在init初始化方法里调用self.view

首先.如果你调用self.view的时候,就会调用view的getter方法, 这个时候,view是空的,那么系统就会自动给你创建一个view,然后就会触发ViewDidLoad方法.那么这个时候,如果你init方法里有数组初始化.但是你还没走到那步,而直接就给数组赋值了,那么这个值赋值给了一个不存在的数组.这样就容易出现错误.所以,尽量不要在init方法里写可视化控件的语句. 附1: UIViewController的生命周期: 当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1

[ios]IOS的AppDelegate方法中的事件触发调用 以及 关闭 ios应用程序

IOS的AppDelegate方法中的事件触发调用 参考:http://blog.sina.com.cn/s/blog_a573f7990101bphp.html //当应用程序将要进入非活动状态执行,在此期间,应用程序不接受消息或事件,比如来电 - (void)applicationWillResignActive:(UIApplication *)application { NSLog(@"应用程序将要进入非活动状态,即将进入后台"); } //应用程序已经进入后台运行 - (vo

iOS的layoutSubviews和drawRect方法何时调用

layoutSubviews在以下情况下会被调用: 1.init初始化不会触发layoutSubviews.2.addSubview会触发layoutSubviews.3.设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化.4.滚动一个UIScrollView会触发layoutSubviews.5.旋转Screen会触发父UIView上的layoutSubviews事件.6.改变一个UIView大小的时候也会触发父UIView上的layoutS

iOS APP启动时所有方法的调用顺序分析

一个应用程序的启动过程要包括代理的创建,控制器的加载和控制器view的加载,这其中有很多关于生命周期的方法,每个方法都是有先后顺序的,如果调用顺序拿不准,或者某段代码写的方法不恰当,就会遇到各种奇葩问题.本文不怕麻烦的在几乎所有启动时要调用的方法里都用了 __FUNCTION__ 打印.结果还有有些地方出人意料的 首先回顾一下应用程序的启动过程 ①.先加载Main函数 ②.在Main函数里的 UIApplicationMain方法中,创建Application对象 创建Application的D

iOS 捕获系统外异常

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 有时应用崩溃,而日志中的输出信息太少,无法定位问题,这是最头疼的事情,尤其很累的时侯,已经想不起来刚才改过什么了,这就叫做无耐. 工欲善其事,必先

iOS之layout方法-layoutSubviews、layoutIfNeeded、setNeedsLayout

下面列举下iOS layout的相关方法: layoutSubviews layoutIfNeeded setNeedsLayout setNeedsDisplay drawRect sizeThatFits sizeToFit 大概常用的上面几个 , 具体的应该还有别的. layoutSubviews 这个方法,默认没有做任何事情,需要子类进行重写 . 系统在很多时候会去调用这个方法: 1.初始化不会触发layoutSubviews,但是如果设置了不为CGRectZero的frame的时候就会

iOS开发>学无止境 - 方法缓存

摘要 只 要用到Objective-C,我们每天都会跟方法调用打交道.我们都知道Objective-C的方法决议是动态的,但是在底层一个方法究竟是怎么找到 的,方法缓存又是怎么运作的却鲜为人知.本文主要从源码角度探究了Objective-C在runtime层的方法决议(Method resolving)过程和方法缓存(Method cache)的实现. 简介 本文作者来自美团酒店旅游事业群iOS研发组.我们致力于创造价值.提升效率.追求卓越.欢迎大家加入我们(简历请发送到邮箱 [email pr

iOS 不定参数方法,类似UIAlertView的方法

//-------------------------- 方法申明 -------------------------- /** *  模仿UIAlertView方法 * *  @param argument 不定参数个数 */ - (void)copyAlertViewMethod:(id)argument, ... NS_REQUIRES_NIL_TERMINATION;//加了NS_REQUIRES_NIL_TERMINATION自动补齐功能就会自动在后面加nil //----------

【IOS】IOS开发问题解决方法索引(一)

IOS开发问题解决方法索引(一) 1       Xcode工程调试时无法命中断点的问题 若没有勾选LLVM Compiler 1.6 –> CodeGeneration –> Generate Debug Symbols 一项,则程序调试时无法命中断点. 2       Xcode调试时查看变量的几种方法 Xcode如何查看内存中的数据 http://blog.csdn.net/evgd2288/article/details/8995779 Xcode的Debug中查看数据细节的方法 ht