From 8704275ea9c9bb5fee0e613d4f340374c81647de Mon Sep 17 00:00:00 2001 From: huangyibiao Date: Thu, 18 Feb 2016 16:22:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=B8=AA=E5=B0=8Fbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RuntimeDemo.xcodeproj/project.pbxproj | 20 +++++ .../UserInterfaceState.xcuserstate | Bin 39319 -> 44944 bytes RuntimeDemo/HYBCat.h | 1 - RuntimeDemo/HYBMethodLearn.m | 1 + RuntimeDemo/HYBMsgSend.m | 23 +++--- RuntimeDemo/HYBPropertyLearn.m | 1 + RuntimeDemo/HYBTestEntry.h | 15 ++++ RuntimeDemo/HYBTestEntry.m | 61 ++++++++++++++++ RuntimeDemo/NSArray+Swizzling.h | 2 +- RuntimeDemo/NSArray+Swizzling.m | 22 ++++-- RuntimeDemo/NSMutableArray+Swizzling.m | 7 +- RuntimeDemo/ViewController.m | 69 +++++++++++++++++- 12 files changed, 193 insertions(+), 29 deletions(-) create mode 100644 RuntimeDemo/HYBTestEntry.h create mode 100644 RuntimeDemo/HYBTestEntry.m diff --git a/RuntimeDemo.xcodeproj/project.pbxproj b/RuntimeDemo.xcodeproj/project.pbxproj index b64fed7..d88460a 100644 --- a/RuntimeDemo.xcodeproj/project.pbxproj +++ b/RuntimeDemo.xcodeproj/project.pbxproj @@ -11,6 +11,9 @@ 691D6FC51C421E68003D41FB /* HYBPropertyLearn.m in Sources */ = {isa = PBXBuildFile; fileRef = 691D6FC41C421E68003D41FB /* HYBPropertyLearn.m */; }; 691D6FC61C421E68003D41FB /* HYBPropertyLearn.m in Sources */ = {isa = PBXBuildFile; fileRef = 691D6FC41C421E68003D41FB /* HYBPropertyLearn.m */; }; 691D6FC71C421E68003D41FB /* HYBPropertyLearn.m in Sources */ = {isa = PBXBuildFile; fileRef = 691D6FC41C421E68003D41FB /* HYBPropertyLearn.m */; }; + 69384B111C47631700B61526 /* HYBTestEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = 69384B101C47631700B61526 /* HYBTestEntry.m */; }; + 69384B121C47631700B61526 /* HYBTestEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = 69384B101C47631700B61526 /* HYBTestEntry.m */; }; + 69384B131C47631700B61526 /* HYBTestEntry.m in Sources */ = {isa = PBXBuildFile; fileRef = 69384B101C47631700B61526 /* HYBTestEntry.m */; }; 69654F5B1C2CDE6600FFB5AC /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 69654F5A1C2CDE6600FFB5AC /* main.m */; }; 69654F5E1C2CDE6600FFB5AC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 69654F5D1C2CDE6600FFB5AC /* AppDelegate.m */; }; 69654F611C2CDE6600FFB5AC /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 69654F601C2CDE6600FFB5AC /* ViewController.m */; }; @@ -83,6 +86,8 @@ 54494B247380150E00DCBCF2 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; 691D6FC31C421E68003D41FB /* HYBPropertyLearn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HYBPropertyLearn.h; sourceTree = ""; }; 691D6FC41C421E68003D41FB /* HYBPropertyLearn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HYBPropertyLearn.m; sourceTree = ""; }; + 69384B0F1C47631700B61526 /* HYBTestEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HYBTestEntry.h; sourceTree = ""; }; + 69384B101C47631700B61526 /* HYBTestEntry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HYBTestEntry.m; sourceTree = ""; }; 69654F561C2CDE6600FFB5AC /* RuntimeDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RuntimeDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 69654F5A1C2CDE6600FFB5AC /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 69654F5C1C2CDE6600FFB5AC /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -171,6 +176,15 @@ name = Property; sourceTree = ""; }; + 69384B0E1C47630500B61526 /* TestEntry */ = { + isa = PBXGroup; + children = ( + 69384B0F1C47631700B61526 /* HYBTestEntry.h */, + 69384B101C47631700B61526 /* HYBTestEntry.m */, + ); + name = TestEntry; + sourceTree = ""; + }; 69654F4D1C2CDE6600FFB5AC = { isa = PBXGroup; children = ( @@ -196,6 +210,7 @@ 69654F581C2CDE6600FFB5AC /* RuntimeDemo */ = { isa = PBXGroup; children = ( + 69384B0E1C47630500B61526 /* TestEntry */, 69657DD21C44A66E0095C032 /* Method */, 691D6FC21C421E3E003D41FB /* Property */, 697364AE1C3A45F9003E1FE9 /* MethodExchange */, @@ -511,6 +526,7 @@ 69657DDA1C44D1A30095C032 /* NSMutableArray+Swizzling.m in Sources */, 698828201C3383F8002363D5 /* HDFArchiveModel.m in Sources */, 6980598D1C30D6070021085B /* HYBTestModel.m in Sources */, + 69384B111C47631700B61526 /* HYBTestEntry.m in Sources */, 698828351C34D476002363D5 /* HYBPig.m in Sources */, 69654F931C30214500FFB5AC /* UIControl+HYBBlock.m in Sources */, 69E0205C1C3771AF0034BF32 /* HYBMsgSend.m in Sources */, @@ -537,6 +553,7 @@ 698828311C34CBAB002363D5 /* HYBDog.m in Sources */, 6980598E1C30D6070021085B /* HYBTestModel.m in Sources */, 69657DE01C44D8620095C032 /* NSArray+Swizzling.m in Sources */, + 69384B121C47631700B61526 /* HYBTestEntry.m in Sources */, 69657DDB1C44D1A30095C032 /* NSMutableArray+Swizzling.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -559,6 +576,7 @@ 698828321C34CBAB002363D5 /* HYBDog.m in Sources */, 6980598F1C30D6070021085B /* HYBTestModel.m in Sources */, 69657DE11C44D8620095C032 /* NSArray+Swizzling.m in Sources */, + 69384B131C47631700B61526 /* HYBTestEntry.m in Sources */, 69657DDC1C44D1A30095C032 /* NSMutableArray+Swizzling.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -684,6 +702,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = RuntimeDemo/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.huangyibiao.RuntimeDemo; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -696,6 +715,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = RuntimeDemo/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.huangyibiao.RuntimeDemo; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/RuntimeDemo.xcworkspace/xcuserdata/huangyibiao.xcuserdatad/UserInterfaceState.xcuserstate b/RuntimeDemo.xcworkspace/xcuserdata/huangyibiao.xcuserdatad/UserInterfaceState.xcuserstate index f48234989f6a384513a7dfdfa9a7fd66643af6ea..fb8cef47ef6c5829ec225e74fa43324ee1ba36bf 100644 GIT binary patch literal 44944 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%0AhKAZ*0a!M( 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 N;N + +@interface HYBTestEntry : NSObject + ++ (void)test; + +@end diff --git a/RuntimeDemo/HYBTestEntry.m b/RuntimeDemo/HYBTestEntry.m new file mode 100644 index 0000000..6e5a522 --- /dev/null +++ b/RuntimeDemo/HYBTestEntry.m @@ -0,0 +1,61 @@ +// +// HYBTestEntry.m +// RuntimeDemo +// +// Created by huangyibiao on 16/1/14. +// Copyright © 2016年 huangyibiao. All rights reserved. +// + +#import "HYBTestEntry.h" + +@implementation HYBTestEntry + + ++ (void)test { + NSDictionary *originDict = @{@"k1": @"v1", + @"k2": @"v2", + @"k3": @"v3", + @"k4": @"v4", + @"k5": @"v5", + @"k6": @"v6", + @"k7": @"v7", + @"k8": @"v8", + @"k9": @"v9"}; + NSDictionary *paramters = @{@"kk1": @"", + @"kk2": @"vv2"}; + + NSDictionary *resutDict = @{@"k1": @"v1", + @"k2": @"v2", + @"k3": @"v3", + @"k4": @"v4", + @"k5": @"v5", + @"k6": @"v6", + @"k7": @"v7", + @"k8": @"v8", + @"k9": @"v9", + @"kk1": @"", + @"kk2":@"vv2"}; + + for (NSUInteger i = 0; i < 1000000; ++i) { + NSMutableDictionary *allParams = [[NSMutableDictionary alloc] initWithDictionary:paramters]; + [allParams addEntriesFromDictionary:originDict]; + + // 判断是否相等 + if (resutDict.count != allParams.count) { + NSLog(@"merge but it is not equal"); + continue; + } + + for (NSString *key in resutDict.allKeys) { + NSString *value1 = [resutDict objectForKey:key]; + NSString *value2 = [allParams objectForKey:key]; + + if (![value1 isEqualToString:value2]) { + NSLog(@"merge but it is not equal"); + continue; + } + } + } +} + +@end diff --git a/RuntimeDemo/NSArray+Swizzling.h b/RuntimeDemo/NSArray+Swizzling.h index d20eee9..bbc7f3f 100644 --- a/RuntimeDemo/NSArray+Swizzling.h +++ b/RuntimeDemo/NSArray+Swizzling.h @@ -10,6 +10,6 @@ @interface NSArray (Swizzling) - +@property (nonatomic, weak) id delegate; @end diff --git a/RuntimeDemo/NSArray+Swizzling.m b/RuntimeDemo/NSArray+Swizzling.m index 0565d66..8942d8d 100644 --- a/RuntimeDemo/NSArray+Swizzling.m +++ b/RuntimeDemo/NSArray+Swizzling.m @@ -12,13 +12,13 @@ @implementation NSArray (Swizzling) -+ (void)load { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [self swizzleSelector:@selector(lastObject) - withSwizzledSelector:@selector(hdf_lastObject)]; - }); -} +//+ (void)load { +// static dispatch_once_t onceToken; +// dispatch_once(&onceToken, ^{ +// [self swizzleSelector:@selector(lastObject) +// withSwizzledSelector:@selector(hdf_lastObject)]; +// }); +//} - (id)hdf_lastObject { if (self.count == 0) { @@ -30,5 +30,13 @@ - (id)hdf_lastObject { return [self hdf_lastObject]; } +- (id)delegate { + + return objc_getAssociatedObject(self, @"__delegate__key"); +} + +- (void)setDelegate:(id)delegate { + objc_setAssociatedObject(self, @"__delegate__key", delegate, OBJC_ASSOCIATION_ASSIGN); +} @end diff --git a/RuntimeDemo/NSMutableArray+Swizzling.m b/RuntimeDemo/NSMutableArray+Swizzling.m index c806659..d2eabb7 100644 --- a/RuntimeDemo/NSMutableArray+Swizzling.m +++ b/RuntimeDemo/NSMutableArray+Swizzling.m @@ -41,12 +41,6 @@ - (instancetype)hdf_initWithObjects:(const id _Nonnull __unsafe_unretained *)ob if (objects[i] == nil) { hasNilObject = YES; NSLog(@"%s object at index %lu is nil, it will be filtered", __FUNCTION__, i); - -//#if DEBUG -// // 如果可以对数组中为nil的元素信息打印出来,增加更容易读懂的日志信息,这对于我们改bug就好定位多了 -// NSString *errorMsg = [NSString stringWithFormat:@"数组元素不能为nil,其index为: %lu", i]; -// NSAssert(objects[i] != nil, errorMsg); -//#endif } } @@ -61,6 +55,7 @@ - (instancetype)hdf_initWithObjects:(const id _Nonnull __unsafe_unretained *)ob } } + NSLog(@"%@", [NSThread callStackSymbols]); return [self hdf_initWithObjects:newObjects count:index]; } diff --git a/RuntimeDemo/ViewController.m b/RuntimeDemo/ViewController.m index 90158e4..08956b7 100644 --- a/RuntimeDemo/ViewController.m +++ b/RuntimeDemo/ViewController.m @@ -17,8 +17,9 @@ #import "HYBPropertyLearn.h" #import "HYBMethodLearn.h" #import "UIViewController+Swizzling.h" +#import "HYBTestEntry.h" -@interface ViewController () +@interface ViewController () @property (nonatomic, strong) UIWebView *webView; @@ -33,25 +34,85 @@ - (void)viewDidLoad { // [HYBTestModel test]; // [HDFArchiveModel test]; // [HYBCat test]; -// [HYBMsgSend test]; + [HYBMsgSend test]; // [HYBMethodExchange test]; // [HYBPropertyLearn test]; // [HYBMethodLearn test]; - [self testWebview]; +// [self testWebview]; +// [HYBTestEntry test]; } - (void)testWebview { self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; self.webView.delegate = self; - NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.haodf.com/"]]; + NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://t.cn/RbQXJ6j"]]; [self.webView loadRequest:req]; + [self.view addSubview:self.webView]; } - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSLog(@"url: %@", request.URL.absoluteString); + NSLog(@"query: %@", request.URL.query); +// [ViewController filterWebView:webView withRequest:request]; return YES; } ++ (BOOL)filterWebView:(UIWebView *)webView withRequest:(NSURLRequest *)request { + // 未登录状态下,不用增加 +// if (kIsEmptyString([HDFCipher token])) { +// return YES; +// } + + NSString *url = request.URL.absoluteString; + + if ([url rangeOfString:@"userId"].location != NSNotFound ) { + return YES; + } + + if ([url isEqualToString:@"about:blank"]) { + return YES; + } + + + NSString *query = request.URL.query; + NSString *format = @"%@?userId=%@&token=%@"; + if (query.length != 0) { + format = @"%@&userId=%@&token=%@"; + } + +// if ([HDFCipher isDoctorApp]) { + url = [NSString stringWithFormat:format, + url, +@"xxxxxx", + @"sdhfodsfdf"]; +// } else if ([HDFCipher isPatientApp]) { +// url = [NSString stringWithFormat:format, +// url, +// [[NSClassFromString(@"HaodfUserManager") sharedManager] userIdString], +// [HDFCipher token]]; +// } + NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; + [webView loadRequest:req]; + + NSString *url1=@"http://unmi.cc?p1=%+&sd &p2=中文"; + NSLog(@"encode: %@", [[self class] encodeURL:url1]); + + return NO; +} + ++ (NSString *)encodeURL:(NSString *)url { + NSString *newString = + CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, + (CFStringRef)url, + NULL, + CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding))); + if (newString) { + return newString; + } + + return url; +} + @end