鍍金池/ 問答/C  iOS/ 分類中如何調(diào)換 init 方法

分類中如何調(diào)換 init 方法

我需要把所有 view 以及子類的 layer.opaque 設(shè)置為 YES,那么我在 view 的分類上調(diào)換 init 方法,但是交換方法中 [super __init]; 出現(xiàn)了 No visible @interface for 'UIResponder' declares the selector '__init' 報錯,我該如何在分類處理呢?

@implementation UIView (__Performance)

+ (void)load{
    // 方法調(diào)換
    [self __exchangeInstanceMethodWithOriginSEL:@selector(init)
                                    exchangeSEL:@selector(__init)];
}

#pragma clang diagnostic ignored "-Wobjc-designated-initializers"
- (instancetype)__init{
    self = [super __init];
    if (self) {
        self.layer.opaque = YES;
    }
    return self;
}

@end
回答
編輯回答
有點壞

self = [self __init]

2017年7月19日 09:37
編輯回答
怣痛

試試:

- (instancetype)__init {
    id __self = [self __init];
    if (self.layer) {
        self.layer.opaque = YES;
    }
    return __self;
}
2018年1月20日 11:20
編輯回答
氕氘氚
  • (void)load{
    // 方法調(diào)換
    [self __exchangeInstanceMethodWithOriginSEL:@selector(init)

                                exchangeSEL:@selector(__init)];

}

pragma clang diagnostic ignored "-Wobjc-designated-initializers"

  • (instancetype)__init{
    self = [super init];
    if (self) {

    self.layer.opaque = YES;

    }
    return self;

}

2017年5月29日 15:03