A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhangmeng 中级黑马   /  2015-8-25 07:59  /  615 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

动态特性基础:

1、动态类型

即运行时再决定对象的类型。这类动态特性在日常应用中非常常见,简单说就是id类型。id类型即通用的对象类,任何对象都可以被id指针所指,而在实际使用中,往往使用introspection来确定该对象的实际所属类:



动态类型,说简单点就是id类型。

动态类型是跟静态类型相对的。

像内置的明确的基本类型都属于静态类型(int、NSString等)。

静态类型在编译的时候就能被识别出来。所以,若程序发生了类型不对应,编译器就会发出警告。

而动态类型就编译器编译的时候是不能被识别的,要等到运行时(run time),即程序运行的时候才会根据语境来识别。所以这里面就有两个概念要分清:编译时跟运行时。





2,动态绑定:

动态绑定是基于动态类型的:

基于动态类型,在某个实例对象被确定后,其类型便被确定了。该对象对应的属性和响应的消息也被完全确定,这就是动态绑定。

动态绑定所做的,即是在实例所属类确定后,将某些属性和相应的方法绑定到实例上。







3,动态加载:

Objective-C Runtime动态加载】---动态创建类Class   

动态创建类Class,动态添加Class成员变量与成员函数,动态变量赋值与取值,动态函数调用等方法

a.使用objc_allocateClassPair创建一个类Class

    const char * className = "Calculator";

    Class kclass = objc_getClass(className);

    if (!kclass)

    {

       Class superClass = [NSObject class];

       kclass = objc_allocateClassPair(superClass, className, 0);

    }



b.使用class_addIvar添加一个成员变量

    NSUInteger size;

    NSUInteger alignment;

    NSGetSizeAndAlignment("*", &size, &alignment);

    class_addIvar(kclass, "exp

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马