1. 程式人生 > >【OC】Runtime使用心得

【OC】Runtime使用心得

一、給類目加屬性時

#import <UIKit/UIKit.h>

@interface UITapGestureRecognizer (NSString)
@property(nonatomic,strong)NSString *dataStr;
@end
#import "UITapGestureRecognizer+NSString.h"
#import <objc/runtime.h>
static char * personNameKey = "personNameKey";

@implementation UITapGestureRecognizer
(NSString)
- (void)setDataStr:(NSString *)dataStr{ // objc_setAssociatedObject(self, personNameKey, dataStr, OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, @selector(dataStr), dataStr, OBJC_ASSOCIATION_COPY_NONATOMIC); } - (NSString*)dataStr { return objc_getAssociatedObject(self
, _cmd); // return objc_getAssociatedObject(self, personNameKey); } @end

二、交換方法時

@implementation UITableView (CNEmpty)
+ (void)load{
    [self changeSEL];
}

+ (void)changeSEL{
    Method formMethod = class_getInstanceMethod(self, @selector(reloadData));
    Method toMethod = class_getInstanceMethod(self
, @selector(cn_reloadData)); // if (class_addMethod(self, @selector(reloadData), method_getImplementation(toMethod), method_getTypeEncoding(toMethod))){ method_exchangeImplementations(formMethod, toMethod); // } } - (void)cn_reloadData{ [self cn_reloadData]; [self addOrMoveEmptyView]; } -(void)setHalvingLine:(UITableViewCell *)cell{ if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } } @end