runtime备份
来源:互联网 发布:软件翻译器 编辑:程序博客网 时间:2024/06/05 01:54
NSObject
@protocol NSObject//...@property (readonly) Class superclass;- (Class)class OBJC_SWIFT_UNAVAILABLE("use 'anObject.dynamicType' instead");- (instancetype)self;- (BOOL)isKindOfClass:(Class)aClass;- (BOOL)isMemberOfClass:(Class)aClass;//...@end
@interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY;}//...+ (BOOL)isSubclassOfClass:(Class)aClass;+ (Class)superclass;+ (Class)class OBJC_SWIFT_UNAVAILABLE("use 'aClass.self' instead");//...@end
应用
- (void)use_nsobject{ Class objectClsObj = [NSObject class]; Class animalClsObj = [FBAnimal class]; Class dogClsObj = [FBDog class]; NSLog(@"objectClsObj = %p, animalClsObj = %p, dogClsObj = %p", objectClsObj, animalClsObj, dogClsObj); NSLog(@"NSObject superclass = %p, FBAnimal superclass = %p, FBDog superclass = %p", [NSObject superclass], [FBAnimal superclass], [FBDog superclass]); NSLog(@"FBDog isSubclassOfClass FBDog = %d", [FBDog isSubclassOfClass:dogClsObj]); NSLog(@"FBDog isSubclassOfClass FBAnimal = %d", [FBDog isSubclassOfClass:animalClsObj]); NSLog(@"FBDog isSubclassOfClass NSObject = %d", [FBDog isSubclassOfClass:objectClsObj]); FBAnimal *animal1 = [[FBAnimal alloc] init]; FBAnimal *animal2 = [[FBDog alloc] init]; FBDog* dog = [[FBDog alloc] init]; NSLog(@"animal1 object = %p, animal1 self = %p, animal1 class = %p", animal1, [animal1 self], [animal1 class]); NSLog(@"animal2 object = %p, animal2 self = %p, animal2 class = %p", animal2, [animal2 self], [animal2 class]); NSLog(@"dog object = %p, dog self = %p, dog class = %p", dog, [dog self], [dog class]); NSLog(@"animal1 isKindOfClass FBAnimal = %d", [animal1 isKindOfClass: animalClsObj]); NSLog(@"animal1 isKindOfClass FBDog = %d", [animal1 isKindOfClass: dogClsObj]); NSLog(@"animal1 isMemberOfClass FBAnimal = %d", [animal1 isMemberOfClass: animalClsObj]); NSLog(@"animal1 isMemberOfClass FBDog = %d", [animal1 isMemberOfClass: dogClsObj]); NSLog(@"animal2 isKindOfClass FBAnimal = %d", [animal2 isKindOfClass: animalClsObj]); NSLog(@"animal2 isKindOfClass FBDog = %d", [animal2 isKindOfClass: dogClsObj]); NSLog(@"animal2 isMemberOfClass FBAnimal = %d", [animal2 isMemberOfClass: animalClsObj]); NSLog(@"animal2 isMemberOfClass FBDog = %d", [animal2 isMemberOfClass: dogClsObj]); NSLog(@"dog isKindOfClass FBAnimal = %d", [dog isKindOfClass: animalClsObj]); NSLog(@"dog isKindOfClass FBDog = %d", [dog isKindOfClass: dogClsObj]); NSLog(@"dog isMemberOfClass FBAnimal = %d", [dog isMemberOfClass: animalClsObj]); NSLog(@"dog isMemberOfClass FBDog = %d", [dog isMemberOfClass: dogClsObj]);}
output:
objectClsObj = 0x101083170, animalClsObj = 0x100822d70, dogClsObj = 0x100822dc0NSObject superclass = 0x0, FBAnimal superclass = 0x101083170, FBDog superclass = 0x100822d70FBDog isSubclassOfClass FBDog = 1FBDog isSubclassOfClass FBAnimal = 1FBDog isSubclassOfClass NSObject = 1animal1 object = 0x7fc7e37d4af0, animal1 self = 0x7fc7e37d4af0, animal1 class = 0x100822d70animal2 object = 0x7fc7e37d68f0, animal2 self = 0x7fc7e37d68f0, animal2 class = 0x100822dc0dog object = 0x7fc7e37d6730, dog self = 0x7fc7e37d6730, dog class = 0x100822dc0animal1 isKindOfClass FBAnimal = 1animal1 isKindOfClass FBDog = 0animal1 isMemberOfClass FBAnimal = 1animal1 isMemberOfClass FBDog = 0animal2 isKindOfClass FBAnimal = 1animal2 isKindOfClass FBDog = 1animal2 isMemberOfClass FBAnimal = 0animal2 isMemberOfClass FBDog = 1dog isKindOfClass FBAnimal = 1dog isKindOfClass FBDog = 1dog isMemberOfClass FBAnimal = 0dog isMemberOfClass FBDog = 1
总结:
- protocol中为instance method,是对instance object的Class isa操作
- interface中class method,是对class object操作
- isSubclassOfClass:本类和子类都属于subclass
- isKindOfClass:本类和子类都属于kind
- isMemberOFClass:本类属于Member,子类不属于member
NSObject封装
@protocol NSObject//...@property (readonly) Class superclass;- (Class)class OBJC_SWIFT_UNAVAILABLE("use 'anObject.dynamicType' instead");- (instancetype)self;- (BOOL)isKindOfClass:(Class)aClass;- (BOOL)isMemberOfClass:(Class)aClass;//...@end
@interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY;}//...+ (BOOL)isSubclassOfClass:(Class)aClass;+ (Class)superclass;+ (Class)class OBJC_SWIFT_UNAVAILABLE("use 'aClass.self' instead");//...@end
应用
- (void)use_nsobject{ Class objectClsObj = [NSObject class]; Class animalClsObj = [FBAnimal class]; Class dogClsObj = [FBDog class]; NSLog(@"objectClsObj = %p, animalClsObj = %p, dogClsObj = %p", objectClsObj, animalClsObj, dogClsObj); NSLog(@"NSObject superclass = %p, FBAnimal superclass = %p, FBDog superclass = %p", [NSObject superclass], [FBAnimal superclass], [FBDog superclass]); NSLog(@"FBDog isSubclassOfClass FBDog = %d", [FBDog isSubclassOfClass:dogClsObj]); NSLog(@"FBDog isSubclassOfClass FBAnimal = %d", [FBDog isSubclassOfClass:animalClsObj]); NSLog(@"FBDog isSubclassOfClass NSObject = %d", [FBDog isSubclassOfClass:objectClsObj]); FBAnimal *animal1 = [[FBAnimal alloc] init]; FBAnimal *animal2 = [[FBDog alloc] init]; FBDog* dog = [[FBDog alloc] init]; NSLog(@"animal1 object = %p, animal1 self = %p, animal1 class = %p", animal1, [animal1 self], [animal1 class]); NSLog(@"animal2 object = %p, animal2 self = %p, animal2 class = %p", animal2, [animal2 self], [animal2 class]); NSLog(@"dog object = %p, dog self = %p, dog class = %p", dog, [dog self], [dog class]); NSLog(@"animal1 isKindOfClass FBAnimal = %d", [animal1 isKindOfClass: animalClsObj]); NSLog(@"animal1 isKindOfClass FBDog = %d", [animal1 isKindOfClass: dogClsObj]); NSLog(@"animal1 isMemberOfClass FBAnimal = %d", [animal1 isMemberOfClass: animalClsObj]); NSLog(@"animal1 isMemberOfClass FBDog = %d", [animal1 isMemberOfClass: dogClsObj]); NSLog(@"animal2 isKindOfClass FBAnimal = %d", [animal2 isKindOfClass: animalClsObj]); NSLog(@"animal2 isKindOfClass FBDog = %d", [animal2 isKindOfClass: dogClsObj]); NSLog(@"animal2 isMemberOfClass FBAnimal = %d", [animal2 isMemberOfClass: animalClsObj]); NSLog(@"animal2 isMemberOfClass FBDog = %d", [animal2 isMemberOfClass: dogClsObj]); NSLog(@"dog isKindOfClass FBAnimal = %d", [dog isKindOfClass: animalClsObj]); NSLog(@"dog isKindOfClass FBDog = %d", [dog isKindOfClass: dogClsObj]); NSLog(@"dog isMemberOfClass FBAnimal = %d", [dog isMemberOfClass: animalClsObj]); NSLog(@"dog isMemberOfClass FBDog = %d", [dog isMemberOfClass: dogClsObj]);}
output:
objectClsObj = 0x101083170, animalClsObj = 0x100822d70, dogClsObj = 0x100822dc0NSObject superclass = 0x0, FBAnimal superclass = 0x101083170, FBDog superclass = 0x100822d70FBDog isSubclassOfClass FBDog = 1FBDog isSubclassOfClass FBAnimal = 1FBDog isSubclassOfClass NSObject = 1animal1 object = 0x7fc7e37d4af0, animal1 self = 0x7fc7e37d4af0, animal1 class = 0x100822d70animal2 object = 0x7fc7e37d68f0, animal2 self = 0x7fc7e37d68f0, animal2 class = 0x100822dc0dog object = 0x7fc7e37d6730, dog self = 0x7fc7e37d6730, dog class = 0x100822dc0animal1 isKindOfClass FBAnimal = 1animal1 isKindOfClass FBDog = 0animal1 isMemberOfClass FBAnimal = 1animal1 isMemberOfClass FBDog = 0animal2 isKindOfClass FBAnimal = 1animal2 isKindOfClass FBDog = 1animal2 isMemberOfClass FBAnimal = 0animal2 isMemberOfClass FBDog = 1dog isKindOfClass FBAnimal = 1dog isKindOfClass FBDog = 1dog isMemberOfClass FBAnimal = 0dog isMemberOfClass FBDog = 1
总结:
- protocol中为instance method,是对instance object的Class isa操作
- interface中class method,是对class object操作
- isSubclassOfClass:本类和子类都属于subclass
- isKindOfClass:本类和子类都属于kind
- isMemberOFClass:本类属于Member,子类不属于member
#if !OBJC_OLD_DISPATCH_PROTOTYPESOBJC_EXPORT void method_invoke(void /* id receiver, Method m, ... */ ) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);OBJC_EXPORT void method_invoke_stret(void /* id receiver, Method m, ... */ ) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0) OBJC_ARM64_UNAVAILABLE;#elseOBJC_EXPORT id method_invoke(id receiver, Method m, ...) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);OBJC_EXPORT void method_invoke_stret(id receiver, Method m, ...) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0) OBJC_ARM64_UNAVAILABLE;#endif
#if !OBJC_OLD_DISPATCH_PROTOTYPESOBJC_EXPORT void method_invoke(void /* id receiver, Method m, ... */ ) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);OBJC_EXPORT void method_invoke_stret(void /* id receiver, Method m, ... */ ) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0) OBJC_ARM64_UNAVAILABLE;#elseOBJC_EXPORT id method_invoke(id receiver, Method m, ...) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);OBJC_EXPORT void method_invoke_stret(id receiver, Method m, ...) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0) OBJC_ARM64_UNAVAILABLE;#endif
OBJC_EXPORT BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
0 0
- runtime备份
- spring中用runtime备份数据库
- 用bat文件备份sqlserver数据库,在通过spring的schedule执行runtime完成周期备份
- runtime
- Runtime
- Runtime
- Runtime
- runtime
- runtime
- Runtime
- runtime*****
- runtime
- runtime
- runtime
- runtime
- runtime
- Runtime
- runtime
- python中执行shell命令的几个方法小结
- nginx与tomcat比较
- android 启动系统的功能页面Action
- idea2016 jdk 1.7启动
- 撰写博客初衷
- runtime备份
- 临时2
- apache2部署多个django project访问时网站一会正常一会不正常
- PHP 5.3.0 以上连接 mysql 数据库慢的问题
- 随便开坑
- 跨域设置iframe的高度自适应
- [原创]逻辑与(&)和逻辑或(|) VS 短路与(&&)和短路或(||)
- iOS 项目中用到的拖拽界面动画
- 数据结构