Objective--C 一 关键字 @property 定义变量函数 @synthesize 实现变量函数 二 函数 alloc 分配内存 init 初始化 new 替代上面两个函数 分配内存,并且初始化 三 规则 0 变量的修饰符 @public @protected @private @package @public 实例变量可以被在任何地方访问。 @protected 实例变量能被声明它的类和子类访问,所有没有显式制定范围的实例变量都是@protected的。 @private 实例变量只能被声明它的类访问。 @package 使用runtime modern,一个@package实例变量在实现这个类的可执行文件镜像中实际上是@public的,但是在外面就是@private(runtime请参考苹果文档Runtime Programming Guide)。 这个类型最常用于框架类的实例变量,使用@private太限制,使用@protected或者@public又太开放。 1 类的实例成员变量(非静态变量) 赋值/取值 通常可以有三种方式,需要注意的是给字符串赋值时需要在字符串前加前缀 @ ;还有就是这些变量的访问只能在非静态函数转中访问; A 对象.成员变量 @protected @public @private B 对象->成员变量 @public C [对象 成员变量set函数] @public @protected @private 2 类的静态变量 A Objective-C自身时不支持静态变量的,但是由于Objective-C是C语言的超类,所以可以使用C语言的static关键字来创建全局变量,全局变量跟Java里的static变量是一样的,只有在类第一次加载的时候才初始化,知道程序被销毁才被释放掉 B 静态变量的调用都必须在静态方法中,无论是赋值还是取值 C static静态变量还可以在方法内定义,只不过在方法内定义的static静态变量只能在方法内调用,方法外无法调用。 3 动态函数 A 标识符 - B 调用方式 [实例化对象 函数] C 实例方法在堆栈上 4 静态函数 A 标识符 + B 调用方式 [类 函数] C 静态方法在堆上分配内存 5 静态方法与实例方法区分 A 静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存。事实上,方法都是一样的,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别 B 静态方法在堆上分配内存,实例方法在堆栈上。事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的 C 实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单。 D 静态方法是静态绑定到子类,不是被继承。 E 一般使用频繁的方法用静态方法,用的少的方法用动态的。静态的速度快,占内存。动态的速度相对慢些,但调用完后,立即释放类,可以节省内存,可以根据自己的需要选择是用动态方法还是静态方法。 F 静态方法修改的是类的状态,而对象修改的是各个对象的状态,这点也是它们重要的区别 G 类的实例化调用是在类的生命周期中存在,当类没有了以后,对应的实例也就没有了,对应的方法也就没有了,静态类不然,只要你引用了那个静态类的命名空间,他就会一直存在,知道你退出系统。 6 alloc\init 与 new A 在实际开发中很少会用到new,一般创建对象咱们看到的全是[[className alloc] init] B 区别只在于alloc分配内存的时候使用了zone 它是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度; C 而为什么不推荐使用new?如果使用new的话,初始化方法被固定死只能调用init. 而你想调用initXXX怎么办?没门儿 D 采用new的方式只能采用默认的init方法完成初始化,采用alloc的方式可以用其他定制的初始化方法。 7 @property @synthesize A 作用 简化属性变量的SET,GET B 简单语法语法 B1 @property 数据类型 变量名; 在.h 文件中; B2 @synthesize 变量名; C 复杂语法
时间: 2024-10-04 23:02:18