From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001
From: 单军华
Date: Wed, 11 Jul 2018 10:47:42 +0800
Subject: [PATCH] 首次上传
---
screendisplay/Pods/MJExtension/MJExtension/MJProperty.m | 191 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 191 insertions(+), 0 deletions(-)
diff --git a/screendisplay/Pods/MJExtension/MJExtension/MJProperty.m b/screendisplay/Pods/MJExtension/MJExtension/MJProperty.m
new file mode 100644
index 0000000..ff57c6c
--- /dev/null
+++ b/screendisplay/Pods/MJExtension/MJExtension/MJProperty.m
@@ -0,0 +1,191 @@
+//
+// MJProperty.m
+// MJExtensionExample
+//
+// Created by MJ Lee on 15/4/17.
+// Copyright (c) 2015��� ���������. All rights reserved.
+//
+
+#import "MJProperty.h"
+#import "MJFoundation.h"
+#import "MJExtensionConst.h"
+#import <objc/message.h>
+
+@interface MJProperty()
+@property (strong, nonatomic) NSMutableDictionary *propertyKeysDict;
+@property (strong, nonatomic) NSMutableDictionary *objectClassInArrayDict;
+@end
+
+@implementation MJProperty
+
+#pragma mark - ���������
+- (instancetype)init
+{
+ if (self = [super init]) {
+ _propertyKeysDict = [NSMutableDictionary dictionary];
+ _objectClassInArrayDict = [NSMutableDictionary dictionary];
+ }
+ return self;
+}
+
+#pragma mark - ������
++ (instancetype)cachedPropertyWithProperty:(objc_property_t)property
+{
+ MJExtensionSemaphoreCreate
+ MJExtensionSemaphoreWait
+ MJProperty *propertyObj = objc_getAssociatedObject(self, property);
+ if (propertyObj == nil) {
+ propertyObj = [[self alloc] init];
+ propertyObj.property = property;
+ objc_setAssociatedObject(self, property, propertyObj, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+ }
+ MJExtensionSemaphoreSignal
+ return propertyObj;
+}
+
+#pragma mark - ������������
+- (void)setProperty:(objc_property_t)property
+{
+ _property = property;
+
+ MJExtensionAssertParamNotNil(property);
+
+ // 1.���������
+ _name = @(property_getName(property));
+
+ // 2.������������
+ NSString *attrs = @(property_getAttributes(property));
+ NSUInteger dotLoc = [attrs rangeOfString:@","].location;
+ NSString *code = nil;
+ NSUInteger loc = 1;
+ if (dotLoc == NSNotFound) { // ������,
+ code = [attrs substringFromIndex:loc];
+ } else {
+ code = [attrs substringWithRange:NSMakeRange(loc, dotLoc - loc)];
+ }
+ _type = [MJPropertyType cachedTypeWithCode:code];
+}
+
+/**
+ * ������������������������
+ */
+- (id)valueForObject:(id)object
+{
+ if (self.type.KVCDisabled) return [NSNull null];
+ return [object valueForKey:self.name];
+}
+
+/**
+ * ������������������������
+ */
+- (void)setValue:(id)value forObject:(id)object
+{
+ if (self.type.KVCDisabled || value == nil) return;
+ [object setValue:value forKey:self.name];
+}
+
+/**
+ * ���������������key���������������keys
+ */
+- (NSArray *)propertyKeysWithStringKey:(NSString *)stringKey
+{
+ if (stringKey.length == 0) return nil;
+
+ NSMutableArray *propertyKeys = [NSMutableArray array];
+ // ���������������������
+ NSArray *oldKeys = [stringKey componentsSeparatedByString:@"."];
+
+ for (NSString *oldKey in oldKeys) {
+ NSUInteger start = [oldKey rangeOfString:@"["].location;
+ if (start != NSNotFound) { // ������������key
+ NSString *prefixKey = [oldKey substringToIndex:start];
+ NSString *indexKey = prefixKey;
+ if (prefixKey.length) {
+ MJPropertyKey *propertyKey = [[MJPropertyKey alloc] init];
+ propertyKey.name = prefixKey;
+ [propertyKeys addObject:propertyKey];
+
+ indexKey = [oldKey stringByReplacingOccurrencesOfString:prefixKey withString:@""];
+ }
+
+ /** ������������ **/
+ // ������
+ NSArray *cmps = [[indexKey stringByReplacingOccurrencesOfString:@"[" withString:@""] componentsSeparatedByString:@"]"];
+ for (NSInteger i = 0; i<cmps.count - 1; i++) {
+ MJPropertyKey *subPropertyKey = [[MJPropertyKey alloc] init];
+ subPropertyKey.type = MJPropertyKeyTypeArray;
+ subPropertyKey.name = cmps[i];
+ [propertyKeys addObject:subPropertyKey];
+ }
+ } else { // ���������������key
+ MJPropertyKey *propertyKey = [[MJPropertyKey alloc] init];
+ propertyKey.name = oldKey;
+ [propertyKeys addObject:propertyKey];
+ }
+ }
+
+ return propertyKeys;
+}
+
+/** ���������������������key */
+- (void)setOriginKey:(id)originKey forClass:(Class)c
+{
+ if ([originKey isKindOfClass:[NSString class]]) { // ������������������key
+ NSArray *propertyKeys = [self propertyKeysWithStringKey:originKey];
+ if (propertyKeys.count) {
+ [self setPorpertyKeys:@[propertyKeys] forClass:c];
+ }
+ } else if ([originKey isKindOfClass:[NSArray class]]) {
+ NSMutableArray *keyses = [NSMutableArray array];
+ for (NSString *stringKey in originKey) {
+ NSArray *propertyKeys = [self propertyKeysWithStringKey:stringKey];
+ if (propertyKeys.count) {
+ [keyses addObject:propertyKeys];
+ }
+ }
+ if (keyses.count) {
+ [self setPorpertyKeys:keyses forClass:c];
+ }
+ }
+}
+
+/** ���������������������������key */
+- (void)setPorpertyKeys:(NSArray *)propertyKeys forClass:(Class)c
+{
+ if (propertyKeys.count == 0) return;
+ NSString *key = NSStringFromClass(c);
+ if (!key) return;
+
+ MJExtensionSemaphoreCreate
+ MJExtensionSemaphoreWait
+ self.propertyKeysDict[key] = propertyKeys;
+ MJExtensionSemaphoreSignal
+}
+
+- (NSArray *)propertyKeysForClass:(Class)c
+{
+ NSString *key = NSStringFromClass(c);
+ if (!key) return nil;
+ return self.propertyKeysDict[key];
+}
+
+/** ������������������������������ */
+- (void)setObjectClassInArray:(Class)objectClass forClass:(Class)c
+{
+ if (!objectClass) return;
+ NSString *key = NSStringFromClass(c);
+ if (!key) return;
+
+ MJExtensionSemaphoreCreate
+ MJExtensionSemaphoreWait
+ self.objectClassInArrayDict[key] = objectClass;
+ MJExtensionSemaphoreSignal
+}
+
+- (Class)objectClassInArrayForClass:(Class)c
+{
+ NSString *key = NSStringFromClass(c);
+ if (!key) return nil;
+ return self.objectClassInArrayDict[key];
+}
+@end
--
Gitblit v1.8.0