美文网首页iOS、swift技术交流!
OC的类、构造方法、单利对象总结

OC的类、构造方法、单利对象总结

作者: 光明程辉 | 来源:发表于2019-05-22 23:39 被阅读4次

1、 类的优雅使用。(类方法不能访问成员变量、不能调用对象的方法)

先来简单区分一下:

//对象的方法
- (void)print;
//类的方法
+ (void)print;

一般创建类,我们都是为了更加好用的调用该类里面的方法。

一般使用是先 #import "xxxx.h" ,引入。然后 ,初始化。像下面这样:

  Cal *cal = [[Cal alloc] init];
  // 调用方法
  int suq1 = [cal mulNum1:5 widthNum2:6];

这样使用是OK 的。那么 有没有一种 更加优雅的 调用方式呢?
有!
使用类方法。

下面使用一个:求 2个数的和 、乘积!说明。
我们可以定义一个类, 里面定义好方法。(它的优雅在于:在本类里 自己就初始化了)。

- (int)pushNum1:(int)num1 andNum:(int)num2
{
    return num1+num2;
}
- (int)mulNum1:(int)num1 widthNum2:(int)num2
{
    return num2*num2;
}

+ (int)sumOfSquareWithNum1:(int)num1 andNum2:(int)num2
{
    Cal *cal = [[Cal alloc] init];
    int squl1 = [cal mulNum1:num1 widthNum2:num2];
    int squl2 = [cal mulNum1:num2 widthNum2:num2];
    int sum = [cal pushNum1:squl1 andNum:squl2];
    return sum;
}
 

那么这样有什么好处?

#import "Cal.h"
// 调用 类方法
int sum = [Cal sumOfSquareWithNum1:5 andNum2:6];

看到了吗,这样写起来是不是很简洁,而且还可以保持调用的类里面会比较简洁。

2、 构造方法的使用。

构造:就是 创建一个可以实例化自己的所有属性使用的方法,并且把自己返回。

那么它的好处又是什么?
先来看一下这个写发吧!看了你就知道了。

- (Cat *)init
{
    // 调用父类的方法
    self = [super init];
    // [super init] 是用于初始化父类那一部分成员变量
    // 如果初始化失败就会返回nil,否则返回当前对象的地址
    if (self != nil) {
        _name = "晓";
    }
    
    return self;
}

- (Cat *)initWithColor:(char *)color
{
    self = [super init];
    if (self != nil) {
        _color = color;
    }
    return self;
}
- (Cat*)initWithName:(char *)name andColor:(char*)color
{

    self = [super init];
    if (self != nil) {
        _name = name;
        _color = color;
    }
    
    return self;
}

- (void)printInfo
{
    NSLog(@"颜色:%s 颜色:%s",_name,_color);
}

怎么使用呢?
直接使用改类调用(苹果的官网的api封装也类似)。

  Cat *cat = [[Cat alloc] init];

  // 构造方法,在初始化的时候 调用(在类创建对象时调用。这里和set 方法不同)
  Cat *langMao = [[Cat alloc] initWithName:"langMao" andColor:"Blue"];
  [langMao printInfo];

3、单利对象(传值)离不开的 static

要记得:
你要创建一个(静态的类),并且初始化。(和构造方法不一样哦![super init])

+ (Class *)defaultCar
{
    //class 指针创建时为nil
    static Class * class;
    if (car == nil) {
        class = [[Class alloc] init]; // 初始化
    }
    return class;
}

作用:创建单例对象,单例对象可以用于传值。或者创建某个对象太耗费资源又经常使用时,也会创建单例对象。

static 声明静态变量,生命周期整个程序运行期间都可以使用

这个有点像 前端 Vuex 的原理。
就是先 创建一个 “商店”。然后,引入 需要的“商品”。最后,拿去交换(买卖)。

1、创建商店 CarStore

// 引入“商品”
#import "Car.h"
// 有类方法
+ (void)printBrand;

2、创建商品 (丰富多彩) Car

@interface Car : NSObject
{
    char * _brand;
}
+ (Car*)defaultCar;
- (void)setBrand:(char*)brand;
- (void)printInfo;
@end

实现“商品”的属性、用途(方法)。

@implementation Car
+ (Car *)defaultCar
{
    //car指针创建时为nil
    static Car * car;
    if (car == nil) {
        car = [[Car alloc] init];
    }
    return car;
}
- (void)setBrand:(char *)brand
{
    _brand = brand;
}
- (void)printInfo
{
    NSLog(@"cat's brand is %s",_brand);
}

3、拿去买卖.(各种买卖法)

        // 在 摆摊位(交易)
        Car * car1 = [Car defaultCar]; // defaultCar 已经封装了实例化(所以可直接调用)
        [car1 setBrand:"bmw"];
        [car1 printInfo];

        Car * car2 = [Car defaultCar];
        [car2 printInfo];        

        // 更加优雅 的使用方式(在商店里交易)
        [CarStore printBrand]; // 相当于 car2

相关文章

  • OC的类、构造方法、单利对象总结

    1、 类的优雅使用。(类方法不能访问成员变量、不能调用对象的方法) 先来简单区分一下: 一般创建类,我们都是为了更...

  • Swift中重写重载构造(初始化)方法

    构造方法是一个类创建对象最先也是必须调用的方法, 在OC中, 我们更习惯称这类方法为初始化方法. OC中的初始化方...

  • 单例模式

    /**单利模式的特点与写法 单利模式的类不能new,只能通过类提供的getInstance方法创建对象,而且单例模...

  • Lesson 0 Objective-C basic

    1.OC特性 (1)OC方法:对象方法(-),类方法(+) 1.对象方法:-(returnType)initWit...

  • From Objective-C to Ruby(4)-类和模块

    类 定义类 OC: ruby: 初始化方法 OC: ruby: 实例变量和属性 OC: ruby: 类方法和对象方...

  • JAVA构造方法

    构造方法: 创建一个对象==>类名 对象名 = new 与类名同名的构造方法名;

  • Java学习笔记(五):类的构造方法和类的主方法

    1. 类的构造方法 类的构造方法是一个与类同名的方法,对象的创建就是通过构造方法实现的。每当类实例化一个对象时,类...

  • 类和对象

    面向对象概述类类的构造方法静态变量、常量和方法类的主方法对象

  • Java基础03 类和对象

    一、类和对象 以上是对类和对象的解释。 二、构造方法 1、什么是构造方法?构造方法是具有特殊功能的那个方法,就是与...

  • 技术问 - 类及其内容

    类: 类的内容: 构造方法 构造方法是给对象的数据进行初始化的,若你不提供构造方法,系统会给类默认的构造方法(无参...

网友评论

    本文标题:OC的类、构造方法、单利对象总结

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