内存管理

    xiaoxiao2021-03-26  7

    三种内存管理机制:

    引用计数、ARC(自动引用技术)、垃圾回收(在iphong和ipad中不能用)

    内存管理的特点:

    每个对象有一个或多个所有者,所有权表示对其指向的对象的引用计数>=1当使用alloc new copy mutableCopy 创建对象时,拥有对象所有权 计数+1retain +1 retain count 为引用计数当使用完之后需要放弃所有权 release,语句中一定要包括alloc new copy retain, 才需要releaseautorelease : 移交给autoreleasepool释放,延时释放dealloc:当对象retain count为0,系统会发送消息给dealloc释放对象的内存平衡法则:在任何一个作用域内,要有retain count +-平衡

    retain assign

    @property(nonatomic,retain) NSString* name; @property(nonatomic,assign) double real; //assign作用于数据类型 //retain作用于对象 调用的是setter方法,避免重复调用 //相当于写法一 -(void)setName:(NSString*)aName{ [aName retain]; [name release]; name = aName; } //或者写法二 -(void)setName:(NSString*)aName{ if(name!=aName){ [name release]; name = [aName retain]; } }

    setter方法的使用

    //setter方法内部不要使用self.name 否则会造成递归调用 //初始化方法里可以直接retain对象成员name -(id)initWithName:(NSString*)aName{ if(self=[super init]){ name = [aName retain];} } //其他地方尽量使用.name方式赋值

    dealloc方法

    凡是把对象成员作为数据成员的类一定要重载dealloc方法 因为在对象初始化时对象成员被计数两次,故需要dealloc来平衡

    -(void)dealloc{ self.name = nil;//aName临时对象被释放以后,对象成员被release(调用setter),并且指针被置为空,避免野指针 [super dealloc]; }
    转载请注明原文地址: https://ju.6miu.com/read-500082.html

    最新回复(0)