Skip to content

Commit

Permalink
Add UIPasteboard avoid crash
Browse files Browse the repository at this point in the history
  • Loading branch information
Walter committed Sep 26, 2017
1 parent 854e1d1 commit d40f293
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 17 deletions.
2 changes: 1 addition & 1 deletion WTSafeGuard.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

Pod::Spec.new do |s|
s.name = 'WTSafeGuard'
s.version = '1.2.0'
s.version = '1.3.0'
s.summary = 'A short description of WTSafeGuard.'

# This description is used to generate tags and improve search results.
Expand Down
14 changes: 14 additions & 0 deletions WTSafeGuard/Classes/UI/UIPasteboard+WTSafe.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//
// UIPasteboard+WTSafe.h
// WTSafeGuard
//
// Created by hongru qi on 26/09/2017.
//

#import <Foundation/Foundation.h>

@interface UIPasteboard (WTSafe)

+ (void)runSafeGuard;

@end
35 changes: 35 additions & 0 deletions WTSafeGuard/Classes/UI/UIPasteboard+WTSafe.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
//
// UIPasteboard+WTSafe.m
// WTSafeGuard
//
// Created by hongru qi on 26/09/2017.
//

#import "UIPasteboard+WTSafe.h"
#import "JRSwizzle.h"
#import <objc/runtime.h>
#import "WTSafeGuard.h"

@implementation UIPasteboard (WTSafe)

+ (void)runSafeGuard
{
NSError *error = nil;
[UIPasteboard jr_swizzleMethod:@selector(pasteboardWithName: create:) withMethod:@selector(wt_pasteboardWithName: create:) error:&error];
}

+ (nullable UIPasteboard *)wt_pasteboardWithName:(UIPasteboardName)pasteboardName create:(BOOL)create
{
if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0) {
return [self wt_pasteboardWithName:pasteboardName create:create];
} else {
__block UIPasteboard *board;
dispatch_sync(dispatch_get_main_queue(), ^{
board = [self wt_pasteboardWithName:pasteboardName create:create];
});

return board;
}
}

@end
28 changes: 12 additions & 16 deletions WTSafeGuard/Classes/UI/UIView+WTSafe.m
Original file line number Diff line number Diff line change
Expand Up @@ -30,49 +30,45 @@ + (void)runSafeGuard

- (void)WT_safe_setNeedsLayout
{
if(![NSThread isMainThread]){
if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0) {
[self WT_safe_setNeedsLayout];
} else {
dispatch_async(dispatch_get_main_queue(), ^{
[WTSafeGuard updateGuardCrashClassName:NSStringFromClass(self.class) selector:NSStringFromSelector(_cmd)];
[self WT_safe_setNeedsLayout];
});
}else{
[self WT_safe_setNeedsLayout];
}
}

- (void)WT_safe_layoutIfNeeded
{
if(![NSThread isMainThread]){
if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0) {
[self WT_safe_layoutIfNeeded];
} else {
dispatch_async(dispatch_get_main_queue(), ^{
[WTSafeGuard updateGuardCrashClassName:NSStringFromClass(self.class) selector:NSStringFromSelector(_cmd)];
[self WT_safe_layoutIfNeeded];
});
}else{
[self WT_safe_layoutIfNeeded];
}
}

- (void)WT_safe_layoutSubviews
{
if(![NSThread isMainThread]){
if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0) {
[self WT_safe_layoutSubviews];
} else {
dispatch_async(dispatch_get_main_queue(), ^{
[WTSafeGuard updateGuardCrashClassName:NSStringFromClass(self.class) selector:NSStringFromSelector(_cmd)];
[self WT_safe_layoutSubviews];
});
}else{
[self WT_safe_layoutSubviews];
}
}

- (void)WT_safe_setNeedsUpdateConstraints
{
if(![NSThread isMainThread]){
if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0) {
[self WT_safe_setNeedsUpdateConstraints];
} else {
dispatch_async(dispatch_get_main_queue(), ^{
[WTSafeGuard updateGuardCrashClassName:NSStringFromClass(self.class) selector:NSStringFromSelector(_cmd)];
[self WT_safe_setNeedsUpdateConstraints];
});
}else{
[self WT_safe_setNeedsUpdateConstraints];
}
}
@end

0 comments on commit d40f293

Please sign in to comment.