内存管理的实质就是管理内存, 我们通常所说的管理内存就是对堆区的内存进行管理.
内存管理机制: 内存管理采用 "引用计数机制 (retain count)'' 当一个对象被创建时(alloc) 引用计数会+1; 每增加一个所有者(retain)对象的引用计数+1, 失去一个所有者(release)对象的引用计数-1; 当对象的引用计数为0, 会调用dealloc方法,销毁对象. 其中, alloc, retain, copy 会使对象的引用计数立即+1; release 会使对象的引用计数立即-1;
autorelease 会在未来的某一时刻对对象进行释放;
内存管理原则: 引用计数的增加和引用计数的减少应当保持平衡 for example : 出现一个alloc , 就对应一个release;出现一个retain, 就对应一个release;
// alloc 在分配内存空间的同时 ,让它所创建的对象的引用计数为1
// alloc返回一个内存引用计数为1的对象
Student *stu = [[Studentalloc] init];
// 打印引用计数
NSLog(@"%ld", [sturetainCount]);
// 让当前所调用的对象的引用计数+1
[sturetain];
NSLog(@"retain == %ld", [sturetainCount]);
// 在当前的计数的基础上-1
[sturelease];
NSLog(@"retain3 == %ld", [sturetainCount]);
[stu release];
NSLog(@"retain4 == %ld", [sturetainCount]);
// 当前的引用计数为0,会自动调用dealloc方法销毁对象
[sturetain];
//野指针 对象释放掉以后, 不能再对此对象进行任何操作,当前指针已经变为野指针 一旦操作会crash