美文网首页
设置指定的初始化方法,和系统提示

设置指定的初始化方法,和系统提示

作者: guoguojianshu | 来源:发表于2020-11-02 16:07 被阅读0次

这个是指定初始化方法,调用的什么方法最终都得调用这个方法

-(instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;

这个方法是指定使用这个方法,进行初始化,其他的方法编译器不通过的

-(instancetype)init __unavailable;

这个方法是这个方法不能调用,

-(instancetype)initWithDate:(NSDate*)date __attribute__((unavailable));

这个方法是不能被调用,并给出原因或者是调用哪个方法

-(instancetype)initWithDate:(NSDate*)date __attribute__((unavailable("Must use initWithFoo: instead.")));

创建单例

使用GCD来创建,效率高

+(instancetype)XSShare{
    static XSPlaySongAVPlayerManager * manager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if (manager == nil) {
            manager = [[super allocWithZone:nil] init];
        }
    });
    return manager;
}

为了外部的调用者,使用正确的调用,得把NSObject的创建对象的方法重写,或者是不能调用(编译器不能运行通过)

由Objective-C的一些特性可以知道,在对象创建的时候,无论是alloc还是new,都会调用到 allocWithZone方法

+(instancetype)allocWithZone:(struct _NSZone *)zone{
    return [XSPlaySongAVPlayerManager XSShare];
}

在通过拷贝的时候创建对象时,会调用到-(id)copyWithZone:(NSZone *)zone-(id)mutableCopyWithZone:(NSZone *)zone方法。因此,可以重写这些方法,让创建的对象唯一。

-(id)copyWithZone:(NSZone *)zone{
    return [XSPlaySongAVPlayerManager XSShare];
}
-(id)mutableCopyWithZone:(NSZone *)zone{
    return [XSPlaySongAVPlayerManager XSShare];
}

温柔派就直接告诉外面,allocnewcopymutableCopy方法不可以直接调用。否则编译不过。

+(instancetype) alloc __attribute__((unavailable("call sharedInstance instead")));
+(instancetype) new __attribute__((unavailable("call sharedInstance instead")));
-(instancetype) copy __attribute__((unavailable("call sharedInstance instead")));
-(instancetype) mutableCopy __attribute__((unavailable("call sharedInstance instead")));

相关文章

  • 设置指定的初始化方法,和系统提示

    这个是指定初始化方法,调用的什么方法最终都得调用这个方法 这个方法是指定使用这个方法,进行初始化,其他的方法编译器...

  • spring注解驱动开发(2)——组件注册

    指定初始化和销毁函数的方法有 @Bean注解指定初始化和销毁方法 组件实现InitializingBean,Dis...

  • Django初始化话admin账号和密码

    Django提供admin后台,便于统一管理用户、权限和权限组,超级用户初始化方法 初始化命令行: 根据提示设置用...

  • iOS 中的初始化方法链条

    iOS 初始化方法链条 设计原则:1.根据根本特性设计指定初始化方法2.所有初始化方法根据指定初始化方法初始化 代...

  • swift 之DESIGNATED,CONVENIENCE

    在swift中有两种初始化方法, 1.指定初始化方法 指定初始化方法其实指的就是 init 方法 2.便利初始化方...

  • UITableView分组索引

    使用系统的方法设置,效果图如下: 部分初始化 数据源的添加 UITableView设置

  • swift中的required

    我们自己写的class 如果给某个初始化方法指定了required,那么子类必须实现这个初始化方法 继承自系统的U...

  • ArrayList源码学习

    容器初始化方法: 两种初始化方法 不指定初始容器大小 内部源码操作 指定初始化容器大小 添加方法 有4种添加方法:...

  • 2018-12-21

    初始化设置 在整个系统部署完毕后,我们需要初始化基本的系统参数,比如:医院设置、库房、用药、区域设置、排班设置等 ...

  • 初始化方法内使用self有什么坏处?

    初始化方法内使用self有什么坏处? 场景描述 iOS初始化方法包括系统默认的和自定义的,常见系统初始化方法有in...

网友评论

      本文标题:设置指定的初始化方法,和系统提示

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