美文网首页
每天进步一点点1

每天进步一点点1

作者: IOS_Wek | 来源:发表于2018-07-26 16:23 被阅读16次

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 写的好全。

相关文章

  • 每天进步1%,一年以后你将----

    每天进步1%,一年以后你将---- 每天进步学会一点点,一年以后会怎样? 每天进步1%,100天以后就是2.70,...

  • 目标与行动相结合

    每天进步一点点,记住方向,每天进步一点点!

  • 每天进步一点点

    每天进步一点点,成长足迹看得见。 每天进步一点点,走向成功是必然。 每天进步一点点,前进不止一小点。 每天进步一点...

  • 习惯是自我提高的复利

    每天进步一点点,坚持带来大改变。说的就是微习惯的复利作用。 001. 每天进步1%。 如果一年内每天都能进步1%,...

  • 无需太多,每天0.01即可

    001 每天改进1% 每天进步一点点,复利带来大改变。 每天改进1%1.01*365=37.78, 每天退步1%0...

  • 无需太多,每天0.01即可

    001 每天改进1% 每天进步一点点,复利带来大改变。 每天改进1%1.01*365=37.78, 每天退步1%0...

  • 2017.8.9

    每天进步一点点 所谓的成长就是每天进步一点点,每周进步点点,每年进步一点点,然后观察复利效应,应该有不错的收益。 ...

  • 主动与被动的进步

    每天进步一点点,但是每天不会主动进步一点点。 每天做好这些事情,让自己每天都保持持续的进步。 随着时间的累积,年龄...

  • 集美与爱于一身的红玫瑰

    每天进步一点点,坚持就会进步

  • 临摹强化基本技能-如何看思维导图

    每天坚持一点点 每天进步一点点

网友评论

      本文标题:每天进步一点点1

      本文链接:https://www.haomeiwen.com/subject/gxxpmftx.html