自定义类工厂方法

1.自定义工厂方法

  • 什么是工厂方法(快速创建方法)

    • 类工厂方法是一种用于分配、初始化实例并返回一个它自己的实例的类方法。类工厂方法很方便,因为它们允许您只使用一个步骤(而不是两个步骤)就能创建对象. 例如new
  • 自定义类工厂方法的规范
    • (1)一定是+号开头
    • (2)返回值一般是instancetype类型
    • (3)方法名称以类名开头,首字母小写
  • 示例
+ (id)person;
+ (id)person
{
    return  [[Person alloc]init];
}

+ (id)personWithAge:(int)age;
+ (id)personWithAge:(int)age
{
    Person *p = [[self alloc] init];
    [p setAge:age];
    return p;
}
  • apple中的类工厂方法
其实苹果在书写工厂方法时也是按照这样的规划书写
    [NSArray array];
    [NSArray arrayWithArray:<#(NSArray *)#>];
    [NSDictionary dictionary];
    [NSDictionary dictionaryWithObject:<#(id)#> forKey:<#(id<NSCopying>)#>];
    [NSSet set];
    [NSSet setWithObject:<#(id)#>];

2.子父类中的类工厂方法

  • 由于之类默认会继承父类所有的方法和属性, 所以类工厂方法也会被继承
  • 由于父类的类工厂方法创建实例对象时是使用父类的类创建的, 所以如果子类调用父类的类工厂方法创建实例对象,创建出来的还是父类的实例对象
  • 为了解决这个问题, 以后在自定义类工厂时候不要利用父类创建实例对象, 改为使用self创建, 因为self谁调用当前方法self就是谁
  • 示例
interface Person : NSObject
+ (id)person;
@end

@implementation Person
+ (id)person
{
    return  [[Person alloc]init];
}
@end

@interface Student : Person
@property NSString *name;
@end

@implementation Student

@end

int main(int argc, const char * argv[])
{
    Student *stu = [Student person];// [[Person alloc] init]
    [stu setName:@"lnj"]; // 报错, 因为Person中没有setName
}
  • 正确写法
@interface Person : NSObject
+ (id)person;
@end

@implementation Person
+ (id)person
{
//   return  [[Person alloc]init];
//     谁调用这个方法,self就代表谁
//    注意:以后写类方法创建初始化对象,写self不要直接写类名
    return  [[self alloc]init];
}
@end

@interface Student : Person
@property NSString *name;
@end

@implementation Student
@end

int main(int argc, const char * argv[])
{
    Student *stu = [Student person];// [[Student alloc] init]
    [stu setName:@"lnj"];
}
时间: 12-04

自定义类工厂方法的相关文章

24-oc类工厂方法和类对象基本概念

类工厂方法 用于快速创建对象的类方法, 我们称之为类工厂方法 类工厂方法应用场景 类工厂方法中主要用于给对象分配存储空间和初始化这块存储空间 类工厂方法使用规范 规范: 一定是类方法 + 方法名称以类的名称开头, 首字母小写 一定有返回值, 返回值是id/instancetype 在类工厂方法实现中,调用本类的构造方法,创建实例对象,并返回实例对象 自定义类工厂方法是苹果的一个规范, 一般情况下, 我们会给一个类提供自定义构造方法和自定义类工厂方法用于创建一个对象 类工厂方法在继承中的注意点 以

OC基础(八)类工厂方法

一:基本用法 类工厂方法作用:提高编码效率,快速创建对象的方法 规范:1.一定是+开头   2.方法以类名开头,首字母小写. 3.一定有返回值,返回类型为id/instancetype 比如:在类的声明和实现中 无参数: + (instancetype)person; + (instancetype)person{ return [[Person alloc] init]; } 在主函数创建对象中就可以直接使用,简化代码. Person *p1 = [Person person];  //此处的

类工厂方法及注意点

+(instancetype)person //p小写 { return [[self alloc] init]; } +(instancetype)personWithAge:(int)age { Person *p= [[self alloc] init]; p.age=age; return p; } 类工厂方法本质:创建一个实体类返回 注意点:创建实体类一定要用self而不是用实体类(此处是Person)

类工厂方法的定义

类工厂方法是一种用于分配.初始化实例并返回一个它自己的实例的类方法.类工厂方法很方便,因为它们允许您只使用一个步骤(而不是两个步骤)就能创建对象. 它们采用以下形式: + (type)className...(在这里 className 不包括任何前缀) 调用类工厂时如:nsstring *string = [nsstring initwithformat:@"jdhj%@",anotherString]

list&lt;自定义类&gt;排序方法

类实现接口IComparable //实现接口的自定义类 //此接口规定了一个返回类型int的方法, //public int CompareTo(object obj) //返回1时this排object前面,0是并列,-1时this排object后面 public class varConf:IComparable { public string name; public string deviceType; public string deviceAddress; public strin

java匿名类工厂方法[java编程思想10.6.1]

package com.ebao.java.innerclass; public interface Service { void method1(); void method2();} public interface ServiceFactory { Service getService();} public class Implementation1 implements Service { private Implementation1(){} @Override public void

Qt中自定义类的方法

参考百度文库的一种方法,讲解还不错,贴在这里,大家可以参考一下 http://wenku.baidu.com/link?url=8LD6wyXHcVwq-ojHaOAwg8zg4MVaJYy4jDrq72s6bvExRl2jxsnOUiF2ydT_7A3m941N1zyab1CA1yMsjihZdZVuK--KHuapEb-SSmVG_Wi###

iOS开发核心语言Objetive C —— 编译器指令@[email&#160;protected]自定义构造方法及类工厂

本分享是面向有意向从事iOS开发的伙伴们,或者已经从事了iOS的开发者.如果您对iOS开发有极高的兴趣,可以与我一起探讨iOS开发,一起学习,共同进步.如果您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列,然后在开始Objective C语言的学习,如果您遇到问题也可以与我探讨,另外将无偿分享自己整理的大概400G iOS学习视频及学习资料,都是干货哦!可以新浪微博私信?关注极客James,期待与您的共同学习和探讨!!由于时间有限,每天在工作之余整理的学习分享,难免有不足之处,

oc38--类工厂方法在继承中

// Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property int age; /* 什么是类工厂方法: 用于快速创建对象的类方法, 我们称之为类工厂方法 类工厂方法中主要用于 给对象分配存储空间和初始化这块存储空间 规范: 1.一定是类方法 + 2.方法名称以类的名称开头, 首字母小写 3.一定有返回值, 返回值是id/instancetype */ + (instancetype)p