黑马程序员技术交流社区

标题: autorelease释放先后顺序求解 [打印本页]

作者: 庐山烟雨浙江潮    时间: 2015-8-11 11:15
标题: autorelease释放先后顺序求解

  1. //这是Person.h

  2. @interface Person : NSObject
  3. +(id)person;
  4. -(void)run;
  5. @end
复制代码

  1. //这是Person.m

  2. #import "Person.h"

  3. @implementation Person

  4. -(void)dealloc{
  5.         NSLog(@"Person dealloc");
  6.         [super dealloc];
  7. }

  8. +(id)person{
  9.         return [[[self alloc] init] autorelease];  //返回的是对象的空间
  10. }
  11. -(void)run{
  12.         NSLog(@"人在走");
  13. }
复制代码

  1. //这是头文件Student.h

  2. #import "Person"

  3. @interface Student: Person

  4. -(void)run;

  5. @end
复制代码

  1. //这是实现文件Student.m

  2. #import "Student.h"
  3. @implementation student
  4. -(void)dealloc{
  5.         NSLog(@"Student dealloc");
  6.         [super dealloc];
  7. }

  8. -(void)run{
  9.         NSLog(@"Student run");
  10. } @end
复制代码

  1. //这是main.m 文件

  2. #import <Foundation/Foundation.h>
  3. #import "Person.h"

  4. int main(int argc, const char * argv[]){

  5.         @autoreleasepool{
  6.        
  7.                
  8.                 Person * p = [Person person];
  9.                
  10.                 student * stu = [student new];
  11.                 [stu run];
  12.                
  13.         }
  14. }
复制代码


为什么上面的代码运行结果是
--------------------
Student run
Student dealloc
Person dealloc
Person dealloc
----------------------
难道不是应该按顺序,先让p release,然后再让Student release?
作者: ws4715535    时间: 2015-8-11 21:20
应该是按照 栈内存的先进后出吧。 实际上你是先用的person的一个类方法 retaincount =1 ,然后用完run方法后 student dealloc 然后person dealloc




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2