黑马程序员技术交流社区
标题: 每日小结:OC弱语法 [打印本页]
作者: 崔石炫 时间: 2014-9-21 17:38
标题: 每日小结:OC弱语法
参考以下代码:
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int_age;
int_weight;
}
@end
@implementation Person
@end
int main()
{
Person*p = [Person new];
[pwalk];
return0;
}
解析:
该段代码声明了一个名为Person的类,包含2个成员变量:_age、_weight,没有任何方法。
main函数中用Person类创建一个名为p的对象,并发送walk消息给对象p。
编译该段代码,产生如下警告:
warning:’Person’ may not respond to ‘walk’
[pwalk];
意即Person类可能不会响应walk消息。
链接过程无任何警告和错误。
运行编译连接产生的可执行文件,程序崩溃,产生以下错误:
[Person walk]:unrecognized selector sent toinstance 0x76c767a698df
即:无法识别的消息被发送给实例对象
此现象即为OC弱语法,OC在运行时检测类的声明与实现是否完整,而不是在编译连接过程。以上代码编译链接能通过,但是运行时因为找不到walk方法的声明与实现,因此程序的运行时崩溃闪退。
以后写OC代码千万注意其弱语法带来的问题,
特别注意以下告警和错误:
warning: ‘Class’ may not respond to ‘method’
error: unrecognized selector sent toinstance
以上告警和错误往往是由类的声明和实现不完整引起的,程序在编译链接或者运行时未能检测到正确的声明和实现;或者方法调用者身份与方法属性不符,比如用对象去调用类方法(无法通过对象找到类方法的实现);比如用类来调用对象方法(无法在类中找到对象方法的实现)。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |