Skip to content

Instantly share code, notes, and snippets.

@yuuki1224
Last active August 29, 2015 14:10
Show Gist options
  • Save yuuki1224/26df18821f49542d16d5 to your computer and use it in GitHub Desktop.
Save yuuki1224/26df18821f49542d16d5 to your computer and use it in GitHub Desktop.
NSProxyの使い方Memo
#import <Foundation/Foundation.h>
@interface ASNDynamicProxy : NSProxy
@property (strong, nonatomic) NSObject *targetObject;
@end
@implementation ASNDynamicProxy
// methodがないときにこのメソッドがまず呼ばれる.NSInvalidArgumentExceptionを出す前に rubyでいうmethod_missing
- (void)forwardInvocation:(NSInvocation *)invocation
{
if (self.targetObject) {
{
// ここで前処理いれるなら
}
[invocation setTarget:self.targetObject];
[invocation invoke];
{
unsigned long length = [[invocation methodSignature] methodReturnLength];
void *buffer = (void *)malloc(length);
[invocation getReturnValue:&buffer];
}
}
}
// これがないとforwardInvocation:が呼ばれない.
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel
{
NSMethodSignature *result;
if (self.targetObject) {
result = [self.targetObject methodSignatureForSelector:sel];
} else {
result = [super methodSignatureForSelector:sel];
}
return result;
}
- (NSString *)description
{
return [self.targetObject description];
}
@end
@yuuki1224
Copy link
Author

NSProxyをサブクラスにしている例
MrAlek/AWPagedArray - https://github.com/MrAlek/AWPagedArray
ページネーションを便利にするためのライブラリ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment