ios学习路线—Objective-C(NSObject)

继承关系图
这里写图片描述

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)wait modes:(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  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值