iPhone How-to:静态库中使用Category

发布时间:2020-06-17 08:46:00 作者:benjielin
来源:网络 阅读:1424

   在iPhone开发中,Category是广泛使用的一种Objective-C的特性,不过如果在静态库中如果使用Category就会遇到一些意外的崩溃,原因就是在使用静态库的应用中会无法发现库中Category的声明。对此stack overflow上也有专门的讨论,并提示说要使用-all_load的编译选项。不过在我实际的项目开发中却这种方法却无法解决问题。经过一番调查和尝试,最终采用的解决办法就是创建一个冗余类,然后将所有的Category都放在该类的文件中,这样在无需实例化冗余类的情况就可以骗过编译器,从而解决了在静态库中使用Category会引发的崩溃问题。

CategoryDummy.h文件如下:

@interface CategoryDummy : NSObject {

}

@end

@interface UIButton(Addition)

- (void) addClickHandler:(SEL)onClick forTarget:(id)target;
- (void) setClickHandler:(SEL)onClick forTarget:(id)target;
- (void) setTitle: (NSString*)title;

@end

@interface UIColor (Addition)

+ (UIColor*) colorWithRGB:(Byte)red green:(Byte)green blue:(Byte)blue;

@end

 

CategoryDummy.m文件如下:

#import "CategoryDummy.h"

@implementation CategoryDummy

@end

@implementation UIButton(Addition)

- (void)addClickHandler:(SEL)onClickSel forTarget:(id)target {
    [self addTarget:target action:onClickSel forControlEvents:UIControlEventTouchUpInside];
}

- (void)setClickHandler:(SEL)onClickSel forTarget:(id)target {
    [self removeTarget:target action:NULL forControlEvents:UIControlEventTouchUpInside];
    [self addTarget:target action:onClickSel forControlEvents:UIControlEventTouchUpInside];
}

- (void) setTitle: (NSString*)title {
    [self setTitle:title forState:UIControlStateNormal];
    [self setTitle:title forState:UIControlStateSelected];
    [self setTitle:title forState:UIControlStateHighlighted];
    [self setTitle:title forState:UIControlStateDisabled];
}

@end

@implementation UIColor (Addition)

+ (UIColor*) colorWithRGB:(Byte)red green:(Byte)green blue:(Byte)blue {
    CGFloat fRed = red / 255.0f;
    CGFloat fGreen = green / 255.0f;
    CGFloat fBlue = blue / 255.0f;
    return [UIColor colorWithRed:fRed green:fGreen blue:fBlue alpha:1.0f];
}

@end

  问题是解决了,副作用就是由于所有的Category都和冗余类在同一文件内声明和实现,导致使用某个Category的时候就需要导入CategoryDummy.h文件,也就意味着导入了所有的Category。Category的文件结构和引入都不单纯。

推荐阅读:
  1. hbase之宽表与窄表对split的影响
  2. HBase 之HFileOutputFormat

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

职场 移动开发 休闲

上一篇:Flex游戏篇——游戏开发概述

下一篇: org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》