A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


  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?

1 个回复

倒序浏览
应该是按照 栈内存的先进后出吧。 实际上你是先用的person的一个类方法 retaincount =1 ,然后用完run方法后 student dealloc 然后person dealloc
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马