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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 星河鹭起 中级黑马   /  2014-6-8 16:37  /  854 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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老师视频中报错了?
谢谢各位大神的帮助

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1 代码格式注意

查看全部评分

5 个回复

倒序浏览
坐等大神。。。努力学习。。。
回复 使用道具 举报
黄莉萍 发表于 2014-6-8 17:53
坐等大神。。。努力学习。。。

已经弄懂了。因为GoodPerson继承了Person的,而GoodPerson的dealloc中调用了[super dealloc],也就是说调用了Person中的dealloc
回复 使用道具 举报
你这不是MJ视频上讲的例子吗?还是建议再去好好看一遍
回复 使用道具 举报
学习学习
回复 使用道具 举报
加油啊,同志们,一起奋斗吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马