美文网首页八天学会OC
第04天OC语言(15):类工厂方法在继承中的注意点

第04天OC语言(15):类工厂方法在继承中的注意点

作者: liyuhong | 来源:发表于2017-07-21 17:33 被阅读13次
  • 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?

创建类工厂方法的时候,应该注意的知识

学习前:你必须会什么?

什么是类工厂方法


一、本章笔记
 一、    
      注意: 以后但凡 自定义类工厂方法, 在类工厂方法中 创建对象 一定不要使用类名创建
      一定要使用self来创建
      self 在类方法中 代表 类对象 , 到底代表哪一个类对象呢?
      调用当前方法,self 就代表谁
 二、
  子类指针 指向 父类对象 (错误写法) Student *s = [Person new];
  父类指针 指向 子类对象 (多态) Person *p = [Student new];

二、code
main.m
#pragma mark 15-类工厂方法在继承中的注意点
#pragma mark 概念

/*
 一、    
      注意: 以后但凡 自定义类工厂方法, 在类工厂方法中 创建对象 一定不要使用类名创建
      一定要使用self来创建
      self 在类方法中 代表 类对象 , 到底代表哪一个类对象呢?
      调用当前方法,self 就代表谁
 二、
  子类指针 指向 父类对象 (错误写法) Student *s = [Person new];
  父类指针 指向 子类对象 (多态) Person *p = [Student new];
 */

#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Student.h"
#pragma mark - main函数
int main(int argc, const char * argv[])
{
    /*
    Student *s = [Student person]; // 本质等于 [[Person alloc]init] // 错误写法
//    Person *p = [Person person];
    // 子类指针 指向 父类对象 (错误写法)
    // 父类指针 指向 子类对象 (多态)
    
//    s.age = 55;
//    NSLog(@"age = %i",s.age);
    s.no = 98;
    NSLog(@"no = %i",s.no);
     */
    
    Student *s =[Student personWithAge:33];
    s.no = 88; // -[Person setNo:]: unrecognized selector sent to instance 0x100204bd0'
    
    return 0;
}

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

@interface Person : NSObject

@property int age;

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

@end

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

@implementation Person
+ (instancetype)person
{
//    return [[Person alloc]init];
    // 注意: 以后但凡 自定义类工厂方法, 在类工厂方法中 创建对象 一定不要使用类名创建
    // 一定要使用self来创建
    // self 在类方法中 代表 类对象 , 到底代表哪一个类对象呢?
    // 调用当前方法,self 就代表谁
    return [[self alloc]init];
}

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

Student
>>>.h
#import "Person.h"

@interface Student : Person

@property int no;

@end

>>>.m
#import "Student.h"

@implementation Student

@end

相关文章

  • 第04天OC语言(15):类工厂方法在继承中的注意点

    不要等到明天,明天太遥远,今天就行动。 须读:看完该文章你能做什么? 创建类工厂方法的时候,应该注意的知识 学习前...

  • OC&iOS

    OC语言基础 1.类与对象 类方法 OC的类方法只有2种:静态方法和实例方法两种 在OC中,只要方法声明在@int...

  • 1.7 继承相关特性

    本小节知识点: 方法重写 继承中方法调用的顺序 继承的注意事项 1.方法重写 在子类中实现与父类中同名的方法,称之...

  • iOS面试题-常规概念

    简要叙述OC语言的特点 类别的作用?继承、类别和扩展在实现中有何区别? OC中类变量的@protected,@pr...

  • 1.6 继承

    本小节知识点: 继承基本概念 OC中的继承关系 OC中如何实现继承 1.继承基本概念 现实生活中的继承 交通工具类...

  • OC 类的继承 方法重载重写

    OC 类的继承 方法重载重写 资料一: 一、类的继承 Objective-c中类的继承与C++类似,不同的是Obj...

  • 设计模式基础(三)

    工厂方法模式 概述:工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现。...

  • 继承

    @interface A :B只要A类继承了B类,A类就拥有B类所有的属性和方法(对象方法和类方法)注意点: 在继...

  • iOS 开发 OC基础篇之类的特性

    OC是面向对象的语言,面向对象程序设计中的类有三大特性:继承,封装,多态 。 封装: OC中的类也有权限控制的功能...

  • 重学iOS——6.类工厂方法注意点以及id和instancety

    类工厂方法的注意点 类工厂方法是一种用于分配、初始化实例并返回一个它自己的实例的类方法。类工厂方法很方便,因为它们...

网友评论

    本文标题:第04天OC语言(15):类工厂方法在继承中的注意点

    本文链接:https://www.haomeiwen.com/subject/noovhxtx.html