mirror of
https://github.com/Tencent/Hippy.git
synced 2026-10-19 23:28:50 +08:00
d9576d4819
* refactor(ios): Revert rename Hippy prefix part3 * refactor(ios): Revert rename from Hippy prefix to NativeRender part1 the original rename pr is #2165 * refactor(ios): Revert rename from Hippy prefix to NativeRender part2 * refactor(ios): Revert rename Hippy prefix part4 * refactor(ios): Revert rename Hippy prefix part5 * refactor(ios): Revert rename Hippy prefix part 6 * refactor(ios): Revert rename Hippy prefix part 7 * refactor(ios): make hippy3 native component compatible with hippy2 * refactor(ios): Revert rename Hippy prefix part 8 * refactor(ios): Revert rename Hippy prefix part 9 * refactor(ios): Revert rename Hippy prefix part 10 * refactor(ios): Revert rename Hippy prefix to NativeRender part 11 * refactor(ios): Revert rename and sdk frame refactor part 12 * refactor(ios): Revert rename and sdk frame refactor part 13 HippyRootView and sdk start related change * feat(ios): Improve method of getting UI state and Add NightMode sync from hippy2 * fix(ios): bridge and rootView's memory issue when dealloc * refactor(ios): Revert rename and sdk frame refactor part 14 * fix(ios): listview and waterfall reload animation bug * fix(ios): fix hippy3 podspec's bug remove all deprecated Header Search Path settings in user_target_xcconfig
68 lines
2.5 KiB
Objective-C
68 lines
2.5 KiB
Objective-C
/*!
|
|
* iOS SDK
|
|
*
|
|
* Tencent is pleased to support the open source community by making
|
|
* Hippy available.
|
|
*
|
|
* Copyright (C) 2019 THL A29 Limited, a Tencent company.
|
|
* All rights reserved.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#import "HippyWeakProxy.h"
|
|
|
|
@interface HippyWeakProxy ()
|
|
|
|
@property (nonatomic, weak) id target;
|
|
|
|
@end
|
|
|
|
@implementation HippyWeakProxy
|
|
|
|
+ (instancetype)weakProxyForObject:(id)target {
|
|
HippyWeakProxy *proxy = [HippyWeakProxy alloc];
|
|
proxy.target = target;
|
|
return proxy;
|
|
}
|
|
|
|
- (id)forwardingTargetForSelector:(SEL)aSelector {
|
|
return _target;
|
|
}
|
|
|
|
- (BOOL)respondsToSelector:(SEL)aSelector {
|
|
return [_target respondsToSelector:aSelector];
|
|
}
|
|
|
|
#pragma mark Handling Unimplemented Methods
|
|
|
|
- (void)forwardInvocation:(NSInvocation *)invocation {
|
|
// Fallback for when target is nil. Don't do anything, just return 0/NULL/nil.
|
|
// The method signature we've received to get here is just a dummy to keep `doesNotRecognizeSelector:` from firing.
|
|
// We can't really handle struct return types here because we don't know the length.
|
|
void *nullPointer = NULL;
|
|
[invocation setReturnValue:&nullPointer];
|
|
}
|
|
|
|
- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector {
|
|
// We only get here if `forwardingTargetForSelector:` returns nil.
|
|
// In that case, our weak target has been reclaimed. Return a dummy method signature to keep `doesNotRecognizeSelector:` from firing.
|
|
// We'll emulate the Obj-c messaging nil behavior by setting the return value to nil in `forwardInvocation:`, but we'll assume that the return
|
|
// value is `sizeof(void *)`. Other libraries handle this situation by making use of a global method signature cache, but that seems heavier than
|
|
// necessary and has issues as well. See https://www.mikeash.com/pyblog/friday-qa-2010-02-26-futures.html and
|
|
// https://github.com/steipete/PSTDelegateProxy/issues/1 for examples of using a method signature cache.
|
|
return [NSObject instanceMethodSignatureForSelector:@selector(init)];
|
|
}
|
|
|
|
@end
|