runtime 유틸리티 - AssociatedObject
UIGestureRecognizer
UIGesture Recognizer의 조작 압력을 완화시키고 하나의 Block으로 서로 다른 제스처 사이의 호출을 해결합니다.기본 코드
#import "UIGestureRecognizer+block.h"
#import
#import
static const int target_key;
@implementation UIGestureRecognizer (block)
+(instancetype)xjg_gestureRecognizerWithActionBlcok:(XJGestureBlock)block{
return [[self alloc]initWithActionBlock:block];
}
-(instancetype)initWithActionBlock:(XJGestureBlock)block{
self = [self init];// init , - self , block 。 ~
[self addActionBlcok:block];
[self addTarget:self action:@selector(invoke:)];
return self;
}
- (void)addActionBlcok:(XJGestureBlock)block{
if(block){
objc_setAssociatedObject(self, &target_key, block, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
}
- (void)invoke:(id)sender{
XJGestureBlock block=objc_getAssociatedObject(self, &target_key);
if(block)
block(sender);
}
@end
github 소스
UIAlertView
여러 개의alertview가 코드를 불필요하게 만들었습니다
//
- (void)firstClick{
UIAlertView *al = [[UIAlertView alloc]initWithTitle:@"first" message:@"ok" delegate:self cancelButtonTitle:@"cancle" otherButtonTitles:@"OK", nil];
al.block = ^(UIAlertView *alert,NSUInteger index){
if(index ==1)
NSLog(@"001");
};
[al show];
}
//
#import "UIAlertView+block.h"
#import
#import
@interface UIAlertView ()
@end
@implementation UIAlertView (block)
- (void)setBlock:(JGAlertBlock)block{
objc_setAssociatedObject(self, @selector(block), block, OBJC_ASSOCIATION_COPY_NONATOMIC);
self.delegate = self;
}
- (JGAlertBlock)block{
return objc_getAssociatedObject(self, @selector(block));
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if(self.block)
self.block(alertView,buttonIndex);
}
@end
github 원본 코드는 이 스타일을 보면 왜 애플 iOS9이alertview를 폐기하고 UIAlert View Controller로 전환하는지 이해할 수 있습니다. 여러 개의alert는 정말 관리하기 어렵고 많은delegate, 코드가 불필요합니다.
위에는 두 가지 다른 사용 스타일이 있는데 첫 번째는 에이전트가 아닌 상황에서 서로 다른 제스처에 Block을 채웠다.여러 개의 제스처를 구분하고 두 번째는 에이전트가 있는 상황에서 서로 다른alert를 구분하는데 모두 associated 기능을 사용합니다.방식은 다르다.곰곰이 생각하다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.