ios学习路线—Objective-C(NSObject)
2016-06-16 10:57
477 查看
继承关系图
Initalizing a Class
一个类的实例在使用前需要先初始化,initilalize在一个类中只被调用一次。
只要一个类或者Categories只要被添加到Objective-C的运行时就会调用此方法;加载后实现这个方法来执行类的特殊行为。
Creating,Copying,and Deallocation Objects
返回一个新的实例,必须和init一起使用
返回一个新的实例,必须和init一起使用(该方法是历史遗留,NSZone已经被弃用)
当一个新对象申请了内存空间,就会立刻调用init方法来初始化这个对象。
在NSObject类中定义的init方法没有初始化,只是返回了self指针。
返回一个通过copyWithZone:创建的实例。
当你需要一个实现NSCopying协议的对象时,可以使用此方法。例如,把一个类对象作为NSDictionary的key值。
当zoon为nil的时候,通过NSMutableCopying 协议方法 mutableCopyWithZone:创建的对象。
对一个采用 NSMutableCopying协议的类来说这是一个方便的方法。如果没有实现mutableCopyWithZone:的话就会抛异常。
雷同copyWithZone:(NSZone *)zone。
分配一个实例新的内存空间,调用init方法,最后返回一个初始化过的对象。
* Identifying Classes*
返回一个class对象
返回一个类的父类Class
判断一个类是否是另一个类的子类
Testing Class Functionality
判断一个实例变量是否能够调用一个类的方法
Testing Protocol Conformance
判断一个接收者是否能够遵从一个给定的protocol。一个接收者遵从一个协议,可以是直接接受这个协议,也可以继承一个已经接受这个协议的类。
Obtaining Information About Methods
定位并且返回接收者实现该方法的地址,因此可以作为一个方法来调用。
传入参数aSelector必须是有效切非空的,可以用respondsToSelector: 这个方法提前判断。
示例:
同- (IMP)methodForSelector:(SEL)aSelector
返回NSMethodSignature对象,这个对象包含被标示的实例方法的描述。
同+ (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector
Describing Objects
以字符串的形式返回对接收者类内容的描述。
Discardable Content Proxy Support
创建一个接收者对象的代理。
Sending Messages
延时调用在当前线程使用默认模式的方法
延时调用在当前线程使用特定模式的方法
anArgument
如果想把需要的数据传给Selector方法中,需要设置anArgument参数,对应Selector就应是带参数的方法
modes
如果这个参数为空或者数组中没有数据,那么就不会调用Selector方法。
示例:
以默认的方式在主线程中调用一个方法
wait
如果设置为YES那么将阻塞当前线程,设置为NO将立刻调用Selector方法
如果当前线程也是主线程,那么设置为YES,Selector方法将会立即调用,arg信息也会立即传输。
这个方法是不可以被取消的,如果想调用取消方法可以使用performSelector:withObject:afterDelay:或者performSelector:withObject:afterDelay:inModes:方法
同- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait,只是多了一个可以选择RunLoop模式的参数。
在指定的线程中执行指定的Selector方法。
其它内容与第3条相同。
是多了一个可以选择RunLoop模式的参数,其它与第5条相同。
在一个新的后台线程中调用Selector方法
取消执行先前用performSelector:withObject:afterDelay:这个方法创建的实例方法。取消的只是当前RunLoop里执行的方法而不是所有RunLoop.
performSelector:onThread:withObject:waitUntilDone:和performSelectorInBackground:withObject:执行的方法不能被取消。
同第8个方法,只是多了Selector方法和要传递的数据。
Forwarding Messages
返回消息被第一个转发的对象。
Dynamically Resolving Methods
动态的为一个类方法提供了一个SEL实现方法。返回YES表明这个方法已经找到并被添加到接收者,否则返回NO。
动态的为一个实例方法提供了一个SEL实现方法。返回YES表明这个方法已经找到并被添加到接收者,否则返回NO。
示例
Error Handling
处理不被接收者识别的信息。
Archiving
Deprecated Methods
Identifying Classes
返回实例变量的Class对象,与 + (Class)class 相同。
返回父Class,与 +(Class)superclass相同。
Identifying and Comparing Objects
判断两个对象是否相等。
返回一个整数,可以在哈希表结构中当作一个地址。如果两个变量isEqual:相等,那么他们的hash值一定相同。
返回自己。
Testing Object Inheritance, Behavior, and Conformance
判断一个变量是否是一个给定类的变量或者任何一个继承该类的类变量。
判断某一个实例是否是这个类的实例变量。
判断某一个对象是否可以执行这个方法
同+ (BOOL)conformsToProtocol:(Protocol *)aProtocol
Describing Objects
同 + (NSString *)description
同+ (NSString *)debugDescription
Sending Messages
Identifying Proxies
判断一个实例不继承自NSObject,如果返回NO就是继承自NSObject,反之返回YES
Obsolete Methods
增加接收者的引用计数。
减少接收者的引用计数。
Decrements the receiver’s retain count at the end of the current autorelease pool block. (required)
Zones are deprecated and ignored by most classes that have it as a parameter. (required)
Initalizing a Class
一个类的实例在使用前需要先初始化,initilalize在一个类中只被调用一次。
+ (void)initialize
只要一个类或者Categories只要被添加到Objective-C的运行时就会调用此方法;加载后实现这个方法来执行类的特殊行为。
+ (void)load
Creating,Copying,and Deallocation Objects
返回一个新的实例,必须和init一起使用
+ (id)alloc
返回一个新的实例,必须和init一起使用(该方法是历史遗留,NSZone已经被弃用)
+ (id)allocWithZone:(NSZone *)zone
当一个新对象申请了内存空间,就会立刻调用init方法来初始化这个对象。
在NSObject类中定义的init方法没有初始化,只是返回了self指针。
- (id)init
返回一个通过copyWithZone:创建的实例。
- (id)copy
当你需要一个实现NSCopying协议的对象时,可以使用此方法。例如,把一个类对象作为NSDictionary的key值。
+ (id)copyWithZone:(NSZone *)zone
当zoon为nil的时候,通过NSMutableCopying 协议方法 mutableCopyWithZone:创建的对象。
对一个采用 NSMutableCopying协议的类来说这是一个方便的方法。如果没有实现mutableCopyWithZone:的话就会抛异常。
- (id)mutableCopy
雷同copyWithZone:(NSZone *)zone。
+ (id)mutableCopyWithZone:(NSZone *)zone
分配一个实例新的内存空间,调用init方法,最后返回一个初始化过的对象。
+ (id)new
* Identifying Classes*
返回一个class对象
+ (Class)class
返回一个类的父类Class
+ (Class)superclass
判断一个类是否是另一个类的子类
+ (BOOL)isSubclassOfClass:(Class)aClass
Testing Class Functionality
判断一个实例变量是否能够调用一个类的方法
+ (BOOL)instancesRespondToSelector:(SEL)aSelector
Testing Protocol Conformance
判断一个接收者是否能够遵从一个给定的protocol。一个接收者遵从一个协议,可以是直接接受这个协议,也可以继承一个已经接受这个协议的类。
+ (BOOL)conformsToProtocol:(Protocol *)aProtocol
Obtaining Information About Methods
定位并且返回接收者实现该方法的地址,因此可以作为一个方法来调用。
传入参数aSelector必须是有效切非空的,可以用respondsToSelector: 这个方法提前判断。
- (IMP)methodForSelector:(SEL)aSelector
示例:
@interface TestIMP : NSObject - (void)saySomething; @end @implementation TestIMP - (void)saySomething { NSLog(@"invoke saySomething"); } @end // For Test TestIMP *testIMP = [[TestIMP alloc] init]; SEL aSelector = @selector(saySomething); IMP imp = [testIMP methodForSelector:aSelector]; imp(testIMP, aSelector);
同- (IMP)methodForSelector:(SEL)aSelector
+ (IMP)instanceMethodForSelector:(SEL)aSelector
返回NSMethodSignature对象,这个对象包含被标示的实例方法的描述。
+ (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector
同+ (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
Describing Objects
以字符串的形式返回对接收者类内容的描述。
+ (NSString *)description
Discardable Content Proxy Support
创建一个接收者对象的代理。
- (id)autoContentAccessingProxy
Sending Messages
延时调用在当前线程使用默认模式的方法
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay
延时调用在当前线程使用特定模式的方法
anArgument
如果想把需要的数据传给Selector方法中,需要设置anArgument参数,对应Selector就应是带参数的方法
modes
如果这个参数为空或者数组中没有数据,那么就不会调用Selector方法。
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes
示例:
[self performSelector:@selector(doSomething:) withObject:[NSArray arrayWithObjects:@"AObject", @"BObject", nil] afterDelay:1.0 inModes:[NSArray arrayWithObjects:NSDefaultRunLoopMode, nil]]; - (void)doSomething:(id)sender { NSLog(@"invoke doSomething"); NSLog(@"%@", sender); }
以默认的方式在主线程中调用一个方法
wait
如果设置为YES那么将阻塞当前线程,设置为NO将立刻调用Selector方法
如果当前线程也是主线程,那么设置为YES,Selector方法将会立即调用,arg信息也会立即传输。
这个方法是不可以被取消的,如果想调用取消方法可以使用performSelector:withObject:afterDelay:或者performSelector:withObject:afterDelay:inModes:方法
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
同- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait,只是多了一个可以选择RunLoop模式的参数。
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)waitmodes:(NSArray *)array
在指定的线程中执行指定的Selector方法。
其它内容与第3条相同。
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thread withObject:(id)arg waitUntilDone:(BOOL)wait
是多了一个可以选择RunLoop模式的参数,其它与第5条相同。
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thread withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array
在一个新的后台线程中调用Selector方法
- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
取消执行先前用performSelector:withObject:afterDelay:这个方法创建的实例方法。取消的只是当前RunLoop里执行的方法而不是所有RunLoop.
performSelector:onThread:withObject:waitUntilDone:和performSelectorInBackground:withObject:执行的方法不能被取消。
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget
同第8个方法,只是多了Selector方法和要传递的数据。
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument
Forwarding Messages
返回消息被第一个转发的对象。
- (id)forwardingTargetForSelector:(SEL)aSelector - (void)forwardInvocation:(NSInvocation *)anInvocation
Dynamically Resolving Methods
动态的为一个类方法提供了一个SEL实现方法。返回YES表明这个方法已经找到并被添加到接收者,否则返回NO。
+ (BOOL)resolveClassMethod:(SEL)name
动态的为一个实例方法提供了一个SEL实现方法。返回YES表明这个方法已经找到并被添加到接收者,否则返回NO。
+ (BOOL)resolveInstanceMethod:(SEL)name
示例
@interface Person : NSObject { NSString *name; float weight; } @property (retain,readwrite) NSString* name; @property (readonly)float weight; @property float height; -(Person*) initWithWeight: (int) weight; -(void) print: (NSString*) str; @end void dynamicMethod(id self,SEL _cmd,float w) { printf("dynamicMethod-%s\n",[NSStringFromSelector(_cmd) cStringUsingEncoding:NSUTF8StringEncoding]); printf("%f\n",w); } @implementation Person @synthesize name; @synthesize weight; @dynamic height; // 注意这里 // 在实现类中使用了@dynamic指令 -(Person*) initWithWeight: (int) w { self=[super init]; if (self) { weight=w; } return self; } -(void) print: (NSString*) str { NSLog(@"%@%@",str,name); } + (BOOL) resolveInstanceMethod: (SEL) sel { NSString *methodName=NSStringFromSelector(sel); BOOL result=NO; //看看是不是我们要动态实现的方法名称 if ([methodName isEqualToString:@"setHeight:"]) { class_addMethod([self class], sel, (IMP) dynamicMethod,"v@:f"); result=YES; } return result; } + (BOOL)resolveClassMethod:(SEL)sel { NSString *methodName=NSStringFromSelector(sel); BOOL result=NO; //看看是不是我们要动态实现的方法名称 if ([methodName isEqualToString:@"setHeight:"]) { class_addMethod([self class], sel, (IMP) dynamicMethod,"v@:f"); result=YES; } return result; } -(void) dealloc { [self setName:nil]; [super dealloc]; }
Error Handling
处理不被接收者识别的信息。
- (void)doesNotRecognizeSelector:(SEL)aSelector
Archiving
- (id)awakeAfterUsingCoder:(NSCoder *)aDecoder - (Class)classForCoder - (Class)classForKeyedArchiver + (NSArray *)classFallbacksForKeyedArchiver + (Class)classForKeyedUnarchiver - (id)replacementObjectForCoder:(NSCoder *)aCoder - (id)replacementObjectForCoder:(NSCoder *)aCoder + (void)setVersion:(NSInteger)aVersion + (NSInteger)version
Deprecated Methods
- (void)finalize
Identifying Classes
返回实例变量的Class对象,与 + (Class)class 相同。
- (Class)class
返回父Class,与 +(Class)superclass相同。
- (Class)superclass
Identifying and Comparing Objects
判断两个对象是否相等。
- (BOOL)isEqual:(id)anObject
返回一个整数,可以在哈希表结构中当作一个地址。如果两个变量isEqual:相等,那么他们的hash值一定相同。
- (NSUInteger)hash
返回自己。
- (id)self
Testing Object Inheritance, Behavior, and Conformance
判断一个变量是否是一个给定类的变量或者任何一个继承该类的类变量。
- (BOOL)isKindOfClass:(Class)aClass
判断某一个实例是否是这个类的实例变量。
- (BOOL)isMemberOfClass:(Class)aClass
判断某一个对象是否可以执行这个方法
- (BOOL)respondsToSelector:(SEL)aSelector
同+ (BOOL)conformsToProtocol:(Protocol *)aProtocol
- (BOOL)conformsToProtocol:(Protocol *)aProtocol
Describing Objects
同 + (NSString *)description
- (NSString *)description
同+ (NSString *)debugDescription
- (NSString *)debugDescription
Sending Messages
- (id)performSelector:(SEL)aSelector - (id)performSelector:(SEL)aSelector withObject:(id)anObject - (id)performSelector:(SEL)aSelector withObject:(id)anObject withObject:(id)anotherObject
Identifying Proxies
判断一个实例不继承自NSObject,如果返回NO就是继承自NSObject,反之返回YES
- (BOOL)isProxy
Obsolete Methods
增加接收者的引用计数。
- (id)retain
减少接收者的引用计数。
- (oneway void)release
Decrements the receiver’s retain count at the end of the current autorelease pool block. (required)
- (id)autorelease
Zones are deprecated and ignored by most classes that have it as a parameter. (required)
- (NSUInteger)retainCount - (NSZone *)zone
相关文章推荐
- 自定义控件三部曲之动画篇(七)——ObjectAnimator基本使用
- JSONObject的遍历
- #106 – Set Property Value to Point to Another Object(设置属性值指向另一个object)
- [Training Video - 3] [Java Introduction] [Object Oriented Programming]
- 【OBJC类扩展之属性字典】NSObject+Property
- ios学习路线—Objective-C(生命周期)
- ios学习路线—Objective-C(通知机制)
- ios学习路线—Objective-C(Block)
- Objective-C --- - UICollectionView (梳理总结)
- 在Objective-C中,如何进行内存管理
- Objective-C中遍历字典、数组和集合的几种常见方式
- Objective-C入门知识
- 空对象模式(Null Object Pattern)
- ios学习路线—Objective-C(KVO)
- android群英传objectAnimator的问题
- ios学习路线—Objective-C(KVC)
- ios学习路线—Objective-C(Extension)
- 【ReactNative】undefined is not an object(evaluating 'this.props.navigator')
- ios学习路线—Objective-C(Protocol)
- ios学习路线—Objective-C(Category)