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

Object-C 工厂方法

时间:2016-04-08 14:44:23      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

 1 /*
 2 类工厂方法:用于分配、初始化实例并返回一个它自己实例的方法,允许你使用一个步骤就能创建对象,比如new 方法
 3  用于快速创建对象的类方法, 我们称之为类工厂方法
 4  类工厂方法中主要用于 给对象分配存储空间和初始化这块存储空间
 5 1、是类方法,必须以 + 开头;
 6 2、返回类型是 instancetype/id类型;
 7 3、方法名是首字母小写的类名。
 8 */
 9 //Person.h
10 #import <Foundation/Foundation.h>
11 @interface Person : NSObject
12 
13 @property age;
14 //无参工厂类方法 
15 + (instancetype)person;
16 //有参数工厂类方法
17 + (instancetype)personWithAge:(int)age;
18 @end
19 
20 //Person.m
21 #import "Person.h"
22 @implementation Person
23 
24 + (instancetype)person
25 {
26     //return [[Person alloc] init];
27     // 注意: 以后但凡自定义类工厂方法, 在类工厂方法中创建对象一定不要使用类名来创建,要使用self来创建
28     // self在类方法中就代表类对象,谁调用当前方法, self就代表谁
29     return [[self alloc] init];
30 }
31 
32 + (instancetype)personWithAge:(int)age
33 {
34     Person *p = [[Person alloc] init];
35     p.age = age;
36     return p;
37 }
38 @end
39 
40 //Student.h
41 #import <Foundation/Foundation.h>
42 
43 @interface Student : Person
44 
45 @property int no;
46 
47 @end
48 
49 //Student.m
50 #import "Student.h"
51 
52 @implementation Student
53 
54 @end
55 
56 //main.m
57 #import <Foundataion/Foundation.h>
58 #import “Person.h”
59 
60 int main(int argc, const char * argv[])
61 {
62 
63     Person *p = [Person person];
64     p.age = 44;
65     NSLog(@"age = %i",p.age);
66 
67     Student *stu = [Student person]; 
68     stu.no = 22; //person 方法 要使用self 来创建,否则这里会报错:父类的类中 没有 no 属性,要用self来创建 指向子类Student
69     NSLog(@"age = %i",stu.no);
70 
71     return 0;
72 }

 

Object-C 工厂方法

标签:

原文地址:http://www.cnblogs.com/aleuxqin/p/5367851.html

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