WEB开发网
开发学院手机开发iPhone 开发 iPhone 开发入门——从 C/C++ 语言到 Objective-C... 阅读

iPhone 开发入门——从 C/C++ 语言到 Objective-C 语言

 2010-02-22 06:15:00 来源:WEB开发网   
核心提示:U ___keymgr_global0000300c D ___progname000025ec t __call_mod_init_funcs000026ec t __call_objcInitU __cthread_init_routine00002900 t __dyld_func_lookup000028a8

U ___keymgr_global

0000300c D ___progname

000025ec t __call_mod_init_funcs

000026ec t __call_objcInit

U __cthread_init_routine

00002900 t __dyld_func_lookup

000028a8 t __dyld_init_check

U __dyld_register_func_for_add_image

U __dyld_register_func_for_remove_image

...

可以看到,这里没有alloc、initWithString:、length3个方法的符号。所以,即使我们添加了新的方法,也可以在任何新旧系统中运行。当然,函数调用之前,需要使用 respondsToSelector: 来确定方法是否存在。正是这样的特性,使得程序可以运行时动态地查询要执行的方法,提高了 Objective-C 语言的柔韧性。

Target-Action Paradigm

Objective-C 语言中,GUI控件对象间的通信利用 Target-Action Paradigm。不像其他事件驱动的 GUI 系统实现的那样,需要以回调函数的形式注册消息处理函数(Win32/MFC,Java AWT, X Window)。Target-Action Paradigm 完全是面向对象的事件传递机制。

例如用户点击菜单的事件,用Target-Action Paradigm来解释就是,调用菜单中被设定目标的Action。这个Action对应的方法不一定需要实现。目标与Action的指定与方法的实现没有关系,源代码编译的时候不会检测,只是在运行时确认(参考前面消息传送的机制)。

运行时,通过respondsToSelector: 方法来检查实现的情况。如果有实现,那么使用performSelector:withObject:来调用具体的Action,像是下面的代码:

// 目标对象

id target;

// 具体Action的 selector

SEL action;

...

// 确认目标是否实现Action

if ([target respondsToSelector:actioin]) {

// 调用具体Action

[target performSelector:action withObject:self];

}

通过这样的架构,利用 setTarget: 可以更该其他的目标,或者 setAction: 变换不同的Action。实现动态的方法调用。

上一页  3 4 5 6 7 8 

Tags:iPhone 开发 入门

编辑录入:coldstar [复制链接] [打 印]
赞助商链接