第04天OC语言(14):类工厂方法基本概念

  • 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?

能学会基本创建类工厂方法

学习前:你必须会什么?

什么是类,什么是类方法

1.什么是类[替换链接 Day01-05-类与对象],什么是类方法[替换链接 Day01-09-第一个OC类方法
]
生活中描述事物无非就是描述事物的名称、属性和行为
    人:年龄、身高、体重
程序如何表现一个类(下面只不过是简单的一个声明而已):
@interface Person : NSObject
{
 int _age;//年龄
}
// 行为
- (void)eat;// 对象方法 需要实例化一个对象 才能调用 [[Person new] eat];
+ (void)eat;// 类方法以+开头 直接使用类调用 [Person eat];
@end

一、本章笔记
 一、
 什么是类工厂方法:
     用于快速创建对象的类方法,我们称之为类工厂方法
     类工厂方法中 主要用于 给对象分配存储空间 和 初始化这块存储空间
 规范:
     1.一定是类方法
     2.方法名 以类的名称开头, 首字母小写
     3.一定有返回值, 返回值是 id/instancetype
 二、
     自定义类工厂方法 是苹果的一个规范,
     一般情况下,我们会给一个类提供自定义构造方法 和自定义类工厂方法
     用于创建一个对象

二、code
main.m
#pragma mark 14-类工厂方法基本概念
#pragma mark 概念
/*
 一、
 什么是类工厂方法:
     用于快速创建对象的类方法,我们称之为类工厂方法
     类工厂方法中 主要用于 给对象分配存储空间 和 初始化这块存储空间
 规范:
     1.一定是类方法
     2.方法名 以类的名称开头, 首字母小写
     3.一定有返回值, 返回值是 id/instancetype
 二、
     自定义类工厂方法 是苹果的一个规范,
     一般情况下,我们会给一个类提供自定义构造方法 和自定义类工厂方法
     用于创建一个对象
 */
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类

#import "Person.h"

#pragma mark - main函数
int main(int argc, const char * argv[])
{
    
//    Person *p = [Person person];
//    p.age = 20;
//    NSLog(@"age = %i",p.age);

    Person *p = [Person personWithAge:33];
    NSLog(@"age = %i",p.age);

//    [[NSString alloc]init];
//    [NSString string];    
//    [NSString alloc]initWithString:<#(nonnull NSString *)#>
//    [NSString stringWithString:<#(nonnull NSString *)#>]
    
//    [[NSArray alloc]init];
//    [NSArray array];
//    [NSArray alloc]initWithObjects:<#(nonnull id), ...#>, nil
//    [NSArray arrayWithObjects:<#(nonnull id), ...#>, nil]
    
    return 0;
}

Person
>>>.h
#import <Foundation/Foundation.h>

@interface Person : NSObject

@property int age;

/*
 什么是类工厂方法:
 用于快速创建对象的类方法,我们称之为类工厂方法
 类工厂方法中 主要用于 给对象分配存储空间 和 初始化这块存储空间
 
 规范:
 1.一定是类方法
 2.方法名 以类的名称开头, 首字母小写
 3.一定有返回值, 返回值是 id/instancetype
 */

+ (instancetype)person;
+ (instancetype)personWithAge:(int)age;

@end

>>>.m
#import "Person.h"

@implementation Person

/*
+ (instancetype)person
{
    Person *p = [Person alloc];
    Person *p1 = [p init];
    return p1;
}
 */

+ (instancetype)person
{
    return [[Person alloc]init];
}

+ (instancetype)personWithAge:(int)age
{
    Person *p = [[Person alloc]init];
    p.age = age;
    
    return p;
}
@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 下面是我最近两年学习OC中的一些基础知识,对于学习OC基础知识的人可能有些帮助,拿出来分享一下,还是那句话不喜勿喷...
    小小赵纸农阅读 2,662评论 1 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,981评论 19 139
  • 对于前男友,她唯独忘不掉的是他身上淡淡的烟草味道。那是一种很干净的味道。工作后,她见到许许多多抽烟的人,但是他们...
    蔡筱墨阅读 301评论 0 1
  • 自己一直都是一个古装剧控,特别爱看古装剧。最近有三部古装剧挺火的,我想从个人的角度谈谈。 《大唐荣耀》 豆瓣评...
    菀桑阅读 1,183评论 0 4