每一个线程都可以持有一个该线程固有的NSMutableDictionary类型的字典
创建线程
+(void)datachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument
官方解释:对对象aTarget调用方法创建新线程并执行
aSelector必须是仅获取一个id类型参数且返回值为void的执行方法
我觉得应该就是让aTarget对象执行aSelector消息 但是并不是用主线程来执行 而是新创建一个新线程来执行 执行结束后线程随之终止 线程从最初就和父线程分离 会自动创建自动释放池
+(void)datachDrawingThread:(SEL)selector toTarget:(id)target withObject:(id)argument
获取线程
-(NSMutableDictionary*)threadDictionary 获取线程的字典
中断线程
+(void)sleepForTimeInterval:(NSTimeInterVal)ti 使线程中断几秒
+(void)sleepUntilDate:(NSDate*)aDate
执行依赖(没懂)
-(void)performSelectorOnMainThread:(SLE)aSelector withObject:(id)arg waitUntiDone:(BOOL)wait
选择器aSelector和参数arg中指定的方法的执行依赖于主线程。wait为YES时 当前线程会一直等待值执行接受 主线程中必须有runloop
NSLock
NSLock*countLock = [[NSLock alloc]init];
[countLock lock];
//[countLock lock];//注意 如果重复加锁就会造成死锁 当前进程也会进入休眠
[countLock unlock];
[countLock tryLock];//尝试获得锁 如果可以则返回YES 如果不能并不会进入休眠 而是直接返回NO 并且继续执行下面的代码
NSConditionLock 条件锁
就是这个锁在初始化的时候会设置一个condition值 这个就相当于密码 只有你在调用这个锁的时候带着相同的condition才能使用锁
-(id)initWithCondition:(NSInteger)condition 初始化
-(NSInteger)condition 返回锁中设定的值
-(void)lockWhenCondition:(NSInteger)condition
如果锁在使用:则线程进入休眠
如果锁不在使用 :
1.如果这个condition值和锁的condition值一样 则可以使用这个锁 就是正常的使用锁
2.如果condition不一致 则进入休眠
-(void)unlockWithCondition:(NSInteger)condition
这个没懂 是只有值相同的才能解锁吗 还是什么意思
-(BOOL)tryLockWithCondition:(NSInteger)condition
一样 就是加个条件 值要一样
NSRecursiveLock 拥有锁的线程重复获得锁也不会休眠
//主要是避免这个情况
NSLock*countLock = [[NSLock alloc]init];
[countLock lock];
[countLock lock];//注意 如果重复加锁就会造成死锁 当前进程也会进入休眠
//这样就不会
NSRecursiveLock*countLock = [[NSRecursiveLock alloc]init];
[countLock lock];
[countLock lock];//同样 此时其他进程是没办法获得这个锁的 会进入休眠 唯一缺点可能就是性能没那么好
@ synchronized(没咋看)
@synchronized(obj)
{
//记述想要排斥的内容
}
运行时会自动创建执行该段代码块的锁(mutex)
obj通常指定为该互斥锁要保护的对象 obj自己不需要是锁的对象
同一个obj的@synchronized块如果有多个 则不可以同时执行