码迷,mamicode.com
首页 > 其他好文 > 详细

类的初始化方法和单例模式

时间:2015-03-11 23:27:22      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

初始化方法的模板

  1. -(id) init {
  2. // 标准初始化模板
  3. self = [super init];
  4. if (self) {
  5. // 实例变量初始化
  6. }
  7. return self ;
  8. }

多个初始化方法

  1. @interface Person : NSObject
  2. // 定义属性
  3. @property(nonatomic) NSString *name ;
  4. @property(nonatomic) NSInteger age ;
  5. // 覆盖父类的初始化方法
  6. -(id) init ;
  7. // 初始化所有属性
  8. -(id) initWithName : (NSString *) newName andAge : (NSInteger) newAge ;
  9. @end
  10. @implementation Person
  11. // 合成getter、setter方法
  12. @synthesize name ,age ;
  13. // 初始化方法,调用其他初始化方法
  14. -(id) init {
  15. return [self initWithName:@"张三" andAge: 13 ] ;
  16. }
  17. // 初始化所有参数方法
  18. -(id) initWithName:(NSString *)newName andAge:(NSInteger) newAge {
  19. // 初始化父类
  20. self = [super init ];
  21. if (self)
  22. {
  23. self.name = newName ;
  24. self.age = newAge ;
  25. }
  26. return self ;
  27. }
  28. @end

单例模式

所谓单例,即我们自己创建一个单例类,该类只能生成唯一的对象,为了防止该对象被复制(copy)或者retain 和 release 等操作,我们必须在所创建的单例的实现文件( .m 文件)中将父类的这些方法给覆盖,该目的是为了保证单例模式的一个严谨性。

注意实现NSCoping协议

ARC版本

  1. @implementation Person
  2. // 获得对象的唯一入口
  3. +(Person *)shareInstance
  4. {
  5. // 静态对象引用
  6. static Person *shareInstance=nil;
  7. // 检查唯一实例是否创建
  8. if (shareInstance == nil) {
  9. // 创建对象,这里使用super 的 allocWithZone ,是因为要调用 父类(NSObject) 的 allocWithZone 进行底层内存分配.
  10. shareInstance = [[super allocWithZone:NULL] init ];
  11. }
  12. return shareInstance;
  13. }
  14. // 覆盖NSObject方法
  15. +(id)allocWithZone:(NSZone *)zone
  16. {
  17. return [self shareInstance];
  18. }
  19. // copy 的时候返回自身
  20. -(id)copyWithZone:(NSZone *)zone
  21. {
  22. return self;
  23. }

非ARC版本

  1. @implementation Person
  2. // 获得对象的唯一入口
  3. +(Person *)shareInstance
  4. {
  5. // 静态对象引用
  6. static Person *shareInstance=nil;
  7. // 检查唯一实例是否创建
  8. if (shareInstance == nil) {
  9. // 创建对象,这里使用super 的 allocWithZone ,是因为要调用 父类(NSObject) 的 allocWithZone 进行底层内存分配.
  10. shareInstance = [[super allocWithZone:NULL] init ];
  11. }
  12. return shareInstance;
  13. }
  14. // 覆盖NSObject方法
  15. +(id)allocWithZone:(NSZone *)zone
  16. {
  17. //retain
  18. return [self shareInstance];
  19. }
  20. // copy 的时候返回自身
  21. -(id)copyWithZone:(NSZone *)zone
  22. {
  23. return self;
  24. }
  25. -(id)retain
  26. {
  27. return self;
  28. }
  29. //无穷大的数,表示不能释放
  30. -(NSUInteger)retainCount
  31. {
  32. return NSUIntegerMax;
  33. }
  34. -(oneway void)release
  35. {
  36. //什么也不做
  37. }
  38. -(id)autorelease
  39. {
  40. return self;
  41. }
  42. @end

类的初始化方法和单例模式

标签:

原文地址:http://www.cnblogs.com/mrwu/p/4331148.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!