黑马程序员技术交流社区
标题:
写一个Person类,要保证无论什么情况下创建Person对象返回的都是同一个对象
[打印本页]
作者:
Liana_fan
时间:
2015-4-29 12:11
标题:
写一个Person类,要保证无论什么情况下创建Person对象返回的都是同一个对象
// Person.h文件
#import <Foundation/Foundation.h>
@interface Person : NSObject
+ (Person *)person;
@end
// Person.m文件
#import "Person.h"
@implementaion Person
+ (Person *)person
{
static Person *person;
if(!person)
{
person = [[Person alloc] init];
}
return person;
}
@end
// main.m文件
#import <Foundation/Foundation.h>
int main()
{
return 0;
}
上面代码对吗?不清楚啥叫单例设计模式
作者:
仰望的繁华
时间:
2015-4-29 12:51
本帖最后由 仰望的繁华 于 2015-4-29 12:59 编辑
思路方向对了, 用静态变量,如果为空就创建,如果不为空,就返回当前。单例模式,在基础视频里讲代码行数统计那个练习的时候,有关NSFileManager提高过。可以去回顾一下。
这样只能保证通过你定义的 person 方法,每次创建都是同一个对象。
但是题目要求无论任何情况,至少我认为 你还需要重写 init、copy 方法,
让通过这些方法创建的都去返回 你person方法里创建的唯一对象。
不过自学有限,除了init和copy还有没有其他的创建对象的方法,我就不确定了。
如果有,还是得考虑跳到person方法去。
最后,没ARC,还得考虑release、dealloc之类的,不能把你的唯一对象给释放了....有ARC的话,水平有限,我不确定是否需要重写,可以考虑重写dealloc里加上打印语句,看看ARC会不会把它释放了。
一旦释放了再重新建立的可就不是同一个了。
当完成这些以后,就要在main函数里,通过各种不同的方法去创建对象,然后打印他们的地址,检查是否相同。
思路只说这么多,代码的话就靠你自己调试了。
作者:
转街过巷
时间:
2015-4-29 14:05
楼主的方法不严谨。注意为了防止该对象被copy或者retain 和 release 等操作,必须在所创建的单例的实现文件中将父类的这些方法给覆盖.
作者:
UP-UP
时间:
2015-4-29 16:12
应该重写allocWithZone方法,不然每次 [[Person alloc] init] 都是一个新的对象,重写之后就可保证 [[Person alloc] init] 还是同一个对象
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2