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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

// 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;
}


上面代码对吗?不清楚啥叫单例设计模式

3 个回复

倒序浏览
本帖最后由 仰望的繁华 于 2015-4-29 12:59 编辑

思路方向对了, 用静态变量,如果为空就创建,如果不为空,就返回当前。单例模式,在基础视频里讲代码行数统计那个练习的时候,有关NSFileManager提高过。可以去回顾一下。

这样只能保证通过你定义的 person 方法,每次创建都是同一个对象。
但是题目要求无论任何情况,至少我认为 你还需要重写 init、copy 方法,
让通过这些方法创建的都去返回 你person方法里创建的唯一对象。

不过自学有限,除了init和copy还有没有其他的创建对象的方法,我就不确定了。
如果有,还是得考虑跳到person方法去。

最后,没ARC,还得考虑release、dealloc之类的,不能把你的唯一对象给释放了....有ARC的话,水平有限,我不确定是否需要重写,可以考虑重写dealloc里加上打印语句,看看ARC会不会把它释放了。
一旦释放了再重新建立的可就不是同一个了。
当完成这些以后,就要在main函数里,通过各种不同的方法去创建对象,然后打印他们的地址,检查是否相同。
思路只说这么多,代码的话就靠你自己调试了。


回复 使用道具 举报
楼主的方法不严谨。注意为了防止该对象被copy或者retain 和 release 等操作,必须在所创建的单例的实现文件中将父类的这些方法给覆盖.
回复 使用道具 举报
应该重写allocWithZone方法,不然每次 [[Person alloc] init] 都是一个新的对象,重写之后就可保证  [[Person alloc] init] 还是同一个对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马