/***************************内存管理*******************************/
引用计数器: oc对象被引用的次数,为0的时候该对象被销毁,内存回收。
retain() :引用次数+1; 返回的是对象本身
release() : 引用次数—1;没有返回值
retainCount():获取引用次数。
dealloc():oc对象被销毁的时候会调用dealloc方法,继承该
方法(放最后面[super dealloc])并重写
ios 的main函数是死循环 ?
创建对象alloc 给对象分配内存空间, 计数器+1;
有alloc就有release,有retain就有release。
野指针:指向僵尸对象(不可用内存)的指针。
(EXC_BAD_ACCESS:访问被回收的内存错误,野指针错误。为避免这种错误,
在release之后 引用计数器=0的时候, 将对象设为nil)
oc没有空指针错误!!
/*************************多对象内存管理**************************/
@property (nonatomic ,retain) Book *book ;对象成员变量
oc用retain ,其他用assign(特殊情况 循环引用用assign)
1.set方法内存管理相关的参数
* retain : release旧值,retain新值(适用于OC对象类型)
* assign : 直接赋值(默认,适用于非OC对象类型)
* copy : release旧值,copy新值
2.是否要生成set方法
* readwrite : 同时生成setter和getter的声明、实现(默认)
* readonly : 只会生成getter的声明、实现
3.多线程管理
* nonatomic : 性能高 (一般就用这个)
* atomic : 性能低(默认)
4.setter和getter方法的名称
* setter : 决定了set方法的名称,一定要有个冒号 :
* getter : 决定了get方法的名称(一般用在BOOL类型)
使用@class 就不用#import来导入类。
引用一个类的规范
1> 在.h文件中用@class来声明类
2> 在.m文件中用#import来包含类的所有东西
/*****************autorelease 与 @autoreleasepool ***************/
@autoreleasepool
{//创建池子
Person *p = [[[Person alloc] init] autorelease];
Person *p = [Person person];
}//回事池子 并将池子里的对象release一次。
写一个类方法
+ (id) person{
return [[[self alloc] init] autorelease];
}
+ (id) personWithAge:(int) age{
Person *p = [Person person];
p.setage = age;
return p;
}
引用计数器: oc对象被引用的次数,为0的时候该对象被销毁,内存回收。
retain() :引用次数+1; 返回的是对象本身
release() : 引用次数—1;没有返回值
retainCount():获取引用次数。
dealloc():oc对象被销毁的时候会调用dealloc方法,继承该
方法(放最后面[super dealloc])并重写
ios 的main函数是死循环 ?
创建对象alloc 给对象分配内存空间, 计数器+1;
有alloc就有release,有retain就有release。
野指针:指向僵尸对象(不可用内存)的指针。
(EXC_BAD_ACCESS:访问被回收的内存错误,野指针错误。为避免这种错误,
在release之后 引用计数器=0的时候, 将对象设为nil)
oc没有空指针错误!!
/*************************多对象内存管理**************************/
@property (nonatomic ,retain) Book *book ;对象成员变量
oc用retain ,其他用assign(特殊情况 循环引用用assign)
1.set方法内存管理相关的参数
* retain : release旧值,retain新值(适用于OC对象类型)
* assign : 直接赋值(默认,适用于非OC对象类型)
* copy : release旧值,copy新值
2.是否要生成set方法
* readwrite : 同时生成setter和getter的声明、实现(默认)
* readonly : 只会生成getter的声明、实现
3.多线程管理
* nonatomic : 性能高 (一般就用这个)
* atomic : 性能低(默认)
4.setter和getter方法的名称
* setter : 决定了set方法的名称,一定要有个冒号 :
* getter : 决定了get方法的名称(一般用在BOOL类型)
/*************************@class与循环引用**************************/
使用@class 就不用#import来导入类。
引用一个类的规范
1> 在.h文件中用@class来声明类
2> 在.m文件中用#import来包含类的所有东西
循环引用: 一段 retain ,一端 assign
/*****************autorelease 与 @autoreleasepool ***************/
@autoreleasepool
{//创建池子
Person *p = [[[Person alloc] init] autorelease];
Person *p = [Person person];
}//回事池子 并将池子里的对象release一次。
写一个类方法
+ (id) person{
return [[[self alloc] init] autorelease];
}
+ (id) personWithAge:(int) age{
Person *p = [Person person];
p.setage = age;
return p;
}