黑马程序员技术交流社区

标题: 内存管理问题求解 [打印本页]

作者: 星河鹭起    时间: 2014-6-8 16:37
标题: 内存管理问题求解
main函数:
  #import <Foundation/Foundation.h>
  #import "Person.h"
  #import "GoodPerson.h"

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

    @autoreleasepool {
        GoodPerson *g = [GoodPerson GoodpersonWithAge:20];
        g.name = @"lisi";
        g.sex = SexMan;
        }

    return 0;
}

Person.m
   #import "Person.h"

  @implementation Person
  - (void)dealloc
  {

    NSLog(@"姓名是%@,年龄是%d,性别是%d,release",_name,_age,_sex);
    [super dealloc];
  }

  + (id)person
  {
    return  [[[self alloc] init] autorelease];
  }

  + (id)personWithAge:(int)age
  {
    Person *p1 = [self person];
    p1.age = age;
    return p1;
  }
  @end

GoodPerson.m
   #import "GoodPerson.h"

  @implementation GoodPerson
  - (void)dealloc
  {
    NSLog(@"GOOD release");
    [super dealloc];
  }

  + (id)GoodpersonWithAge:(int)age
  {
    GoodPerson *g = [self person];
    g.age = age;
    return g;
  }
  end

问题1:为什么我明明没有创建Person对象,但是在对象销毁时,Person的对象却销毁了。
问题2:如果我将Person.m文件中 + (id)person函数改成如下:
      + (id)person
  {
    return  [[[person alloc] init] autorelease];
  }
   程序运行不会报错,但是MJ老师视频中报错了?
谢谢各位大神的帮助


作者: 黄莉萍    时间: 2014-6-8 17:53
坐等大神。。。努力学习。。。
作者: 星河鹭起    时间: 2014-6-8 17:57
黄莉萍 发表于 2014-6-8 17:53
坐等大神。。。努力学习。。。

已经弄懂了。因为GoodPerson继承了Person的,而GoodPerson的dealloc中调用了[super dealloc],也就是说调用了Person中的dealloc
作者: koukou    时间: 2014-6-8 18:33
你这不是MJ视频上讲的例子吗?还是建议再去好好看一遍
作者: yangying514    时间: 2014-6-9 11:16
学习学习
作者: qddnovo    时间: 2014-6-9 21:08
加油啊,同志们,一起奋斗吧




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