每天进步一点点1

1)NSArray 和 NSSet 区别在containsObject这个函数的实现上就不一样,NSArray是循环去得到,NSSet是通过Key has表里面获取。

对于数组:
///GUNSTEP NSArray indexOfObject: 方法的实现

  • (BOOL)containsObject:(id)anObject {
    return [self indexOfObject:anObject] != NSNotFound;
    }

  • (NSUInteger) indexOfObject: (id)anObject
    {
    unsigned c = [self count];

    if (c > 0 && anObject != nil)
    {
    unsigned i;
    IMP get = [self methodForSelector: oaiSel];
    BOOL (eq)(id, SEL, id)
    = (BOOL (
    )(id, SEL, id))[anObject methodForSelector: eqSel];

      for (i = 0; i < c; i++)
          if ((*eq)(anObject, eqSel, (*get)(self, oaiSel, i)) == YES)
              return i;
    

    }
    return NSNotFound;
    }

对于Set:

  • (BOOL) containsObject: (id)anObject
    {
    return (([self member: anObject]) ? YES : NO);
    }
    //在 GSSet,m 里有对 member 的实现
  • (id) member: (id)anObject
    {
    if (anObject != nil)
    {
    GSIMapNode node = GSIMapNodeForKey(&map, (GSIMapKey)anObject);
    if (node != 0)
    {
    return node->key.obj;
    }
    }
    return nil;
    }

2)GCD 有可能发生死锁
for (int i = 0, i < 999; i++) {
dispatch_async(q,^{...});
}
dispatch_barrier_sync(q,^{...});

如果q 是一个主线的话可能会发生死锁了。

那么怎么办呢?
1,可以用dispatch_apply 函数:作用:该函数按指定的次数将指定的Block追加到指定的Dispatch Queue中,并等到全部的处理执行结束
dispatch_apply(999,q,^(size_t i){...});

2,使用信号源

define CONCURRENT_TASKS 4

dispatch_queue_t q = dispatch_queue_create("com.qiuxuewei.gcd", nil);
dispatch_semaphore_t sema = dispatch_semaphore_create(CONCURRENT_TASKS);
for (int i = 0; i < 999; i++) {
dispatch_async(q, ^{
dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}

性能优化:https://mp.weixin.qq.com/s/653JVbLJx3zIfBoxR9WXKw 写的好全。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文/熠歆 人生不能俭省的三件事 第一,学习 年轻时学是为了理想,为了安定 中年时,学是为了补充空洞的心理 老年时,...
    熠歆阅读 1,950评论 2 2
  • 今日练习程序.变量的命名和使用,主要是在使用变量名时避免命名错误,程序存在错误时python解释器将竭尽能力的地帮...
    o舞夜醉猫_阅读 3,251评论 0 0
  • 每日三部曲走起…… 早起 早睡
    zhzzjun阅读 1,229评论 0 0
  • 细节决定成败 前两天,方同学提前一周就开始筹备准备周五请他的朋友吃饭的相关事宜。碰巧他是周四上班,...
    小米雨路阅读 583评论 0 0
  • 今天学习关于孩子性教育的有关知识。性教育几岁做,如何做,做哪些方面。 很希望各位爸爸妈妈能够认真对待这个关乎孩子安...
    晗星阅读 1,594评论 0 0

友情链接更多精彩内容