黑马程序员技术交流社区
标题:
内存管理问题求解
[打印本页]
作者:
星河鹭起
时间:
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