Object-C 记录 左手的ㄟ右手 2022-07-12 05:13 76阅读 0赞 \#import 与 \#include 的区别 \#import 比\#include 更高级一点,会检测重复包含的问题,例如:C语言的头文件一般都包含了如下: \#ifndefine xxxxx头文件 \#define xxxxx头文件 \#end 避免重复包含,但是\#import导入头文件直接避免重复包含的问题,无需在头文件编写定义的问题 \#import 与 \#include 的区别 \#import 比\#include 更高级一点,会检测重复包含的问题,例如:C语言的头文件一般都包含了如下: \#ifndefine xxxxx头文件 \#define xxxxx头文件 \#end 避免重复包含,但是\#import导入头文件直接避免重复包含的问题,无需在头文件编写定义的问题 @property(retain) 这个属性实现了release旧对象,retain 新对象 @property(copy) 在浅拷贝的情况下,copy类似retain的操作,只是将其计数器加1,但是在深拷贝的情况下,这是复制了一个新的副本,并且retain,例如:NSMutableString 调用了copy则返回的对象是深拷贝,两个对象的地址是不一样的,retainCount的引用计数是1(除了系统常量以外) 小总结: NSString成员建议使用copy,其他对象建议使用retain属性 self 在成员函数中self指向this 指针 在静态成员函数中指向类名 autorelease 很多时候会实现自动释放内存,但是有时候还是手动实现释放内存,以免内存长时间占用 category 分类只能扩展成员函数,不能添加成员变量,但是可以添加@property,不过会出现警告 protocol 使得类遵循某种实现的方法,类似基类调用虚函数 block 语法:int (^Sum)(int a,int b)=^(int a,int b)\{ return a+b; \}; 类似定义函数指针int (^Sum)(int a,int b) Block实体是蓝色部分 定义Block指针 typedef int (^Sum)(int a,int b) 这样Sum就是一种变量类型 1.Block可以访问外部的变量,但是只能访问不能修改 2.如果使用了\_\_block关键字声明变量,则可以修改和访问这个变量,例子:\_\_block int i = 2017 retainCount 返回-1 表示这是系统常量,即使对其进行release也不会释放该对象 **构造方法** 可以声明一个initXXX这样子构造一个对象出来,这个在调用alloc的时候,最好使用self来调用, \[self alloc\] ,这样可以解决继承的问题,copyWithZone也是如此 结构体成员(struct) Object-C 是不允许直接修改结构体的某个成员,只允许结构体赋值给结构体,比如:CPoint.x =10,这样子是不允许的,只能是CPoint X,Y;X=Y; instancetype 表示当前实例的类型,可以在构造的时候不返回id,而返回实例的真实类型,可以在编译的是偶产生错误 **+(void)load\{** **\}** 只要@import头文件就会加载类这个方法,只会调用一次 **+(void)initialize** 类实例化的时候就会调用这个方法,只调用一次
还没有评论,来说两句吧...