一. #improt 和include区别?@class?
1.include 主要用用来引用C 文件 import 主要引用OC 头文件 import 确保一个文件只能被导入一次 避免了交叉编译。
@class 一般是 头文件中 声明该类的某个实例变量时用到 在.m 文件中还是要用import.
2.如果在 classA.h中
#import classB.h 相当于#include classB.h的头文件
如果其他.m文件 #import 了 classA.h文件 编译的时候也会#import classB.h文件 浪费编译时间
@class classB 就没有#include classB.h 仅仅需要在用到classB 的 classA.m文件中 #import classB.h文件即可
如果ClassA.h中仅需要声明一个ClassB的指针,那么就可以在ClassA.h中声明
@ClassB
...
ClassB *pointer;
3. A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,产生死循环的问题。如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。
二.getter setter方法.
为每个属性增加属于该属性的两个方法。
1.在接口文件中定义这两个方法
getter方法声明
-(int)num1;
setter方法声明
-(void)setnum1:(int)num;
getter方法实现
-(int)num1
{
return num1;
}
setter方法实现
-(void)setnum1:(int)num
{
num1=num;
}
2.使用实例调用 setter getter方法
calculator*cal=[[calculator alloc]init];
getter方法
NSlog("cal 实例的 num1属性的值是 %d",[cal num1]);
setter方法
[cal setnum1:99];
NSlog("cal 实例的 num1属性的值是 %d",[cal num1]);
@property int age;(声明 getter setter方法)
@synthesize age;(实现 getter setter方法)
二. assign retain nonatomic copy readwrite readonly 属性的作用是什么?
readwrite 可以生成getter 和 setter 方法(只有一个参数)
readonly 只读特性 只生成getter方法 不生成setter方法 不希望属性在类外被改变。
assign 是赋值特性 仅仅在设置变量时 setter方法传值给实例变量
retain 表示持有特性 setter 方法先将传入参数保留 然后再赋值 retaincontent +1
copy 拷贝特性 setter 将传入参数复制一份
nonatomic 非原子访问特性,多线程并发访问时 会提高性能。赋值时候不加锁。(多线程访问特点)