From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001
From: 单军华
Date: Wed, 11 Jul 2018 10:47:42 +0800
Subject: [PATCH] 首次上传

---
 screendisplay/Pods/YYCategories/YYCategories/Foundation/NSObject+YYAdd.h |  302 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 302 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/YYCategories/YYCategories/Foundation/NSObject+YYAdd.h b/screendisplay/Pods/YYCategories/YYCategories/Foundation/NSObject+YYAdd.h
new file mode 100755
index 0000000..8f5c169
--- /dev/null
+++ b/screendisplay/Pods/YYCategories/YYCategories/Foundation/NSObject+YYAdd.h
@@ -0,0 +1,302 @@
+//
+//  NSObject+YYAdd.h
+//  YYCategories <https://github.com/ibireme/YYCategories>
+//
+//  Created by ibireme on 14/10/8.
+//  Copyright (c) 2015 ibireme.
+//
+//  This source code is licensed under the MIT-style license found in the
+//  LICENSE file in the root directory of this source tree.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ Common tasks for NSObject.
+ */
+@interface NSObject (YYAdd)
+
+
+#pragma mark - Sending messages with variable parameters
+///=============================================================================
+/// @name Sending messages with variable parameters
+///=============================================================================
+
+/**
+ Sends a specified message to the receiver and returns the result of the message.
+ 
+ @param sel    A selector identifying the message to send. If the selector is
+               NULL or unrecognized, an NSInvalidArgumentException is raised.
+ 
+ @param ...    Variable parameter list. Parameters type must correspond to the
+               selector's method declaration, or unexpected results may occur.
+               It doesn't support union or struct which is larger than 256 bytes.
+ 
+ @return       An object that is the result of the message.
+ 
+ @discussion   The selector's return value will be wrap as NSNumber or NSValue
+               if the selector's `return type` is not object. It always returns nil
+               if the selector's `return type` is void.
+ 
+ Sample Code:
+ 
+     // no variable args
+     [view performSelectorWithArgs:@selector(removeFromSuperView)];
+     
+     // variable arg is not object
+     [view performSelectorWithArgs:@selector(setCenter:), CGPointMake(0, 0)];
+     
+     // perform and return object
+     UIImage *image = [UIImage.class performSelectorWithArgs:@selector(imageWithData:scale:), data, 2.0];
+     
+     // perform and return wrapped number
+     NSNumber *lengthValue = [@"hello" performSelectorWithArgs:@selector(length)];
+     NSUInteger length = lengthValue.unsignedIntegerValue;
+     
+     // perform and return wrapped struct
+     NSValue *frameValue = [view performSelectorWithArgs:@selector(frame)];
+     CGRect frame = frameValue.CGRectValue;
+ */
+- (nullable id)performSelectorWithArgs:(SEL)sel, ...;
+
+/**
+ Invokes a method of the receiver on the current thread using the default mode after a delay.
+ 
+ @warning      It can't cancelled by previous request.
+ 
+ @param sel    A selector identifying the message to send. If the selector is
+               NULL or unrecognized, an NSInvalidArgumentException is raised immediately.
+ 
+ @param delay  The minimum time before which the message is sent. Specifying
+               a delay of 0 does not necessarily cause the selector to be
+               performed immediately. The selector is still queued on the
+               thread's run loop and performed as soon as possible.
+ 
+ @param ...    Variable parameter list. Parameters type must correspond to the
+               selector's method declaration, or unexpected results may occur.
+               It doesn't support union or struct which is larger than 256 bytes.
+ 
+ Sample Code:
+ 
+     // no variable args
+     [view performSelectorWithArgs:@selector(removeFromSuperView) afterDelay:2.0];
+     
+     // variable arg is not object
+     [view performSelectorWithArgs:@selector(setCenter:), afterDelay:0, CGPointMake(0, 0)];
+ */
+- (void)performSelectorWithArgs:(SEL)sel afterDelay:(NSTimeInterval)delay, ...;
+
+/**
+ Invokes a method of the receiver on the main thread using the default mode.
+ 
+ @param sel    A selector identifying the message to send. If the selector is
+               NULL or unrecognized, an NSInvalidArgumentException is raised.
+ 
+ @param wait   A Boolean that specifies whether the current thread blocks until
+               after the specified selector is performed on the receiver on the
+               specified thread. Specify YES to block this thread; otherwise,
+               specify NO to have this method return immediately.
+ 
+ @param ...    Variable parameter list. Parameters type must correspond to the
+               selector's method declaration, or unexpected results may occur.
+               It doesn't support union or struct which is larger than 256 bytes.
+ 
+ @return       While @a wait is YES, it returns object that is the result of
+               the message. Otherwise return nil;
+ 
+ @discussion   The selector's return value will be wrap as NSNumber or NSValue
+               if the selector's `return type` is not object. It always returns nil
+               if the selector's `return type` is void, or @a wait is YES.
+ 
+ Sample Code:
+ 
+     // no variable args
+     [view performSelectorWithArgsOnMainThread:@selector(removeFromSuperView), waitUntilDone:NO];
+     
+     // variable arg is not object
+     [view performSelectorWithArgsOnMainThread:@selector(setCenter:), waitUntilDone:NO, CGPointMake(0, 0)];
+ */
+- (nullable id)performSelectorWithArgsOnMainThread:(SEL)sel waitUntilDone:(BOOL)wait, ...;
+
+/**
+ Invokes a method of the receiver on the specified thread using the default mode.
+ 
+ @param sel    A selector identifying the message to send. If the selector is
+               NULL or unrecognized, an NSInvalidArgumentException is raised.
+ 
+ @param thread The thread on which to execute aSelector.
+ 
+ @param wait   A Boolean that specifies whether the current thread blocks until
+               after the specified selector is performed on the receiver on the
+               specified thread. Specify YES to block this thread; otherwise,
+               specify NO to have this method return immediately.
+ 
+ @param ...    Variable parameter list. Parameters type must correspond to the
+               selector's method declaration, or unexpected results may occur.
+               It doesn't support union or struct which is larger than 256 bytes.
+ 
+ @return       While @a wait is YES, it returns object that is the result of
+               the message. Otherwise return nil;
+ 
+ @discussion   The selector's return value will be wrap as NSNumber or NSValue
+               if the selector's `return type` is not object. It always returns nil
+               if the selector's `return type` is void, or @a wait is YES.
+ 
+ Sample Code:
+ 
+     [view performSelectorWithArgs:@selector(removeFromSuperView) onThread:mainThread waitUntilDone:NO];
+     
+     [array  performSelectorWithArgs:@selector(sortUsingComparator:)
+                            onThread:backgroundThread
+                       waitUntilDone:NO, ^NSComparisonResult(NSNumber *num1, NSNumber *num2) {
+         return [num2 compare:num2];
+     }];
+ */
+- (nullable id)performSelectorWithArgs:(SEL)sel onThread:(NSThread *)thread waitUntilDone:(BOOL)wait, ...;
+
+/**
+ Invokes a method of the receiver on a new background thread.
+ 
+ @param sel    A selector identifying the message to send. If the selector is
+               NULL or unrecognized, an NSInvalidArgumentException is raised.
+ 
+ @param ...    Variable parameter list. Parameters type must correspond to the
+               selector's method declaration, or unexpected results may occur.
+               It doesn't support union or struct which is larger than 256 bytes.
+ 
+ @discussion   This method creates a new thread in your application, putting
+               your application into multithreaded mode if it was not already.
+               The method represented by sel must set up the thread environment
+               just as you would for any other new thread in your program.
+ 
+ Sample Code:
+ 
+     [array  performSelectorWithArgsInBackground:@selector(sortUsingComparator:),
+                ^NSComparisonResult(NSNumber *num1, NSNumber *num2) {
+        return [num2 compare:num2];
+     }];
+ */
+- (void)performSelectorWithArgsInBackground:(SEL)sel, ...;
+
+/**
+ Invokes a method of the receiver on the current thread after a delay.
+ 
+ @warning     arc-performSelector-leaks
+ 
+ @param sel   A selector that identifies the method to invoke. The method should
+              not have a significant return value and should take no argument.
+              If the selector is NULL or unrecognized,
+              an NSInvalidArgumentException is raised after the delay.
+ 
+ @param delay The minimum time before which the message is sent. Specifying a
+              delay of 0 does not necessarily cause the selector to be performed
+              immediately. The selector is still queued on the thread's run loop
+              and performed as soon as possible.
+ 
+ @discussion  This method sets up a timer to perform the aSelector message on
+              the current thread's run loop. The timer is configured to run in
+              the default mode (NSDefaultRunLoopMode). When the timer fires, the
+              thread attempts to dequeue the message from the run loop and
+              perform the selector. It succeeds if the run loop is running and
+              in the default mode; otherwise, the timer waits until the run loop
+              is in the default mode.
+ */
+- (void)performSelector:(SEL)sel afterDelay:(NSTimeInterval)delay;
+
+
+#pragma mark - Swap method (Swizzling)
+///=============================================================================
+/// @name Swap method (Swizzling)
+///=============================================================================
+
+/**
+ Swap two instance method's implementation in one class. Dangerous, be careful.
+ 
+ @param originalSel   Selector 1.
+ @param newSel        Selector 2.
+ @return              YES if swizzling succeed; otherwise, NO.
+ */
++ (BOOL)swizzleInstanceMethod:(SEL)originalSel with:(SEL)newSel;
+
+/**
+ Swap two class method's implementation in one class. Dangerous, be careful.
+ 
+ @param originalSel   Selector 1.
+ @param newSel        Selector 2.
+ @return              YES if swizzling succeed; otherwise, NO.
+ */
++ (BOOL)swizzleClassMethod:(SEL)originalSel with:(SEL)newSel;
+
+
+#pragma mark - Associate value
+///=============================================================================
+/// @name Associate value
+///=============================================================================
+
+/**
+ Associate one object to `self`, as if it was a strong property (strong, nonatomic).
+ 
+ @param value   The object to associate.
+ @param key     The pointer to get value from `self`.
+ */
+- (void)setAssociateValue:(nullable id)value withKey:(void *)key;
+
+/**
+ Associate one object to `self`, as if it was a weak property (week, nonatomic).
+ 
+ @param value  The object to associate.
+ @param key    The pointer to get value from `self`.
+ */
+- (void)setAssociateWeakValue:(nullable id)value withKey:(void *)key;
+
+/**
+ Get the associated value from `self`.
+ 
+ @param key The pointer to get value from `self`.
+ */
+- (nullable id)getAssociatedValueForKey:(void *)key;
+
+/**
+ Remove all associated values.
+ */
+- (void)removeAssociatedValues;
+
+
+#pragma mark - Others
+///=============================================================================
+/// @name Others
+///=============================================================================
+
+/**
+ Returns the class name in NSString.
+ */
++ (NSString *)className;
+
+/**
+ Returns the class name in NSString.
+ 
+ @discussion Apple has implemented this method in NSObject(NSLayoutConstraintCallsThis),
+ but did not make it public.
+ */
+- (NSString *)className;
+
+/**
+ Returns a copy of the instance with `NSKeyedArchiver` and ``NSKeyedUnarchiver``.
+ Returns nil if an error occurs.
+ */
+- (nullable id)deepCopy;
+
+/**
+ Returns a copy of the instance use archiver and unarchiver.
+ Returns nil if an error occurs.
+ 
+ @param archiver   NSKeyedArchiver class or any class inherited.
+ @param unarchiver NSKeyedUnarchiver clsas or any class inherited.
+ */
+- (nullable id)deepCopyWithArchiver:(Class)archiver unarchiver:(Class)unarchiver;
+
+@end
+
+NS_ASSUME_NONNULL_END

--
Gitblit v1.8.0