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;
    }
    结果:
     
    ------------------------------------------------------------------------------------
  • 相关阅读:
    linux查看端口号监听状态
    linux / centos 安装SQL Server 2017 设置默认语言与排序规则Chinese_PRC_CI_AS
    centos 生产环境部署 asp.net core
    shell参数处理模板
    搜狗语料库数据整编
    Call From master/192.168.128.135 to master:8485 failed on connection exception: java.net.ConnectException: Connection refused
    spark-shell启动报错:Yarn application has already ended! It might have been killed or unable to launch application master
    webmagic爬取博客园所有文章
    jdbc链接hive报错:java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransport
    NotePad++ 正则表达式替换 高级用法 [转]
  • 原文地址:https://www.cnblogs.com/lignpeng/p/5444694.html
Copyright © 2011-2022 走看看