zoukankan      html  css  js  c++  java
  • iOS类初始化

    类继承下来的初始化有三种:
    +(void)load:
    +(void)initialize:
    -(instancetype)init:
     
    +(void)load:会自动调用(也可手动调用),只要有引用runtime就会自动去调用类的+(void)load方法,就是#import“”
    +(void)initialize:会自动调用(也可手动调用),在类的第一个方法被调用前调用。同时也说明runtime对+(void)load的调用并不视为类的第一个方法。
    -(instancetype)init:手动调用,需要使用super关键字来调用父类的方法,让父类也完成相同的操作
     
    Runtime调用+(void)load时没有autorelease pool
    其原因是runtime调用+(void)load的时候,程序还没有建立其autorelease pool,所以那些会需要使用到autorelease pool的代码,都会出现异常。这一点是非常需要注意的,也就是说放在+(void)load中的对象都应该是alloc出来并且不能使用autorelease来释放。
     
    +(void)load
    +(void)initialize
     
    执行时机
    1、程序一运行就立即执行;
    2、程序运行过程中只会执行一次;
    3、如果某个方法只想执行一次,就放在这里
    1、在类的方法第一次被调用的时候执行;
    2、并非程序一启动就会调用;
     
    若自身未定义,是否使用父类的方法
     
    分类中的定义
    全部执行,但是后于类中的方法
    覆盖类中的方法,只执行一个
     
    根据这样的特性,在创建工具类时,我们可以使用+(void)initialize来完成一些对象的初始化
     
    //--------------------------测试----------------------------------------------------------
    定义GATest类:
    #import <Foundation/Foundation.h>
    @interface GATest : NSObject
    +(void)gatest;
    -(void)test;
    @end
    实现:
    #import "GATest.h"
    @implementation GATest
    -(instancetype)init{
        if (self = [super init]) {
            NSLog(@"init......");
        }
        return self;
    }
    +(void)load{
        NSLog(@"load .... 只要引用了我就会被调用。");
    }
    +(void)initialize{
        NSLog(@"initialize......");
    }
    +(void)gatest{
        NSLog(@"调用了GATest类方法");
    }
    @end
    ------------------------------------------------------------------------------------
    #import <Foundation/Foundation.h>
    #import "GATest.h"
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            // insert code here...
            NSLog(@"Hello, World!");
    //        [GATest gatest];
            GATest *gat = [[GATest alloc]init];
    //        [gat test];
        }
        return 0;
    }
    结果:
     
    ------------------------------------------------------------------------------------
  • 相关阅读:
    Django url (路由)
    JAVASCRIPT
    鼠标点击事件
    HTML div 盒子 添加/删除——浮层
    面向对象__call__
    面向对象—的__new__()方法详解
    元类
    MYSQL 索引
    视图——触发器——事务——存储过程
    vim、用户相关、特殊权限、压缩减压、rpm、yum、
  • 原文地址:https://www.cnblogs.com/lignpeng/p/5444694.html
Copyright © 2011-2022 走看看