美文网首页
08-27小记

08-27小记

作者: 檐下风铃听雨声 | 来源:发表于2020-08-27 19:25 被阅读0次

    1.而苹果文档指出,cornerRadius只会默认设置backgroundColorborder的圆角,而不会设置content的圆角,除非同时设置了layer.masksToBoundstrue(对应UIView的clipsToBounds属性)。

    1、指出以下两种 property 的写法,分别可能造成什么隐患?

    @property (copy) NSMutableArray * array1;
    @property (atomic, strong) NSArray * array2;

    因为copy策略拷贝出来的是一个不可变对象,然而却把它当成可变对象使用,很容易造成程序奔溃
    //如:-[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance 0x7fcd1bc30460
    // copy后返回的是不可变对象(即 arr 是 NSArray 类型,NSArray 类型对象不能调用 NSMutableArray 类型对象的方法)

    这里还有一个问题,该属性使用了同步锁,会在创建时生成一些额外的代码用于帮助编写多线程程序,这会带来性能问题,通过声明nonatomic可以节省这些虽然很小但是不必要额外开销,在iOS开发中应该使用nonatomic替代atomic

    copy关键字.png

    2、如何用GCD和SDWebImage的SDWebImageDownloader 的

    • (nullable SDWebImageDownloadToken *)downloadImageWithURL:(nullable NSURL *)url
      options:(SDWebImageDownloaderOptions)options
      progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock
      completed:(nullable SDWebImageDownloaderCompletedBlock)completedBlock;

    在异步非线程中,实现完成串行下载组图片文件。即一个完成再才开始下载第二个。
    SDWebImageDownloaderCompletedBlock和SDWebImageDownloaderOptions 参数无需关心。

    3、"一个酒窖里有一千桶酒, 其中有一桶是毒酒 , 白鼠喝了毒酒一个星期后会死去。 现在问给你多少只白鼠(最少的),在一个星期内确定那桶毒酒。(写出算法思想)

    如对1000桶按1~1000编码,需要10位二进制数。

    因此只需要取10只老鼠,每只老鼠只喝其对应位数为1的编号的酒。

    即10只老鼠按以下编码:

    第一只 00000 00001

    第二只 00000 00010

    第三只 00000 00100

    第四只 00000 01000

    ...

    第十只 10000 00000

    每只老鼠只喝其编码与酒编码做位与运算非0的酒。如果毒酒的编码在某一位为1,则监控该位的老鼠必喝,结果为1.

    即把10只老鼠的结果,按位填入一个10位二进制数中,其结果即为毒酒编号。

    例如:编号为10001 00011的酒是毒酒。则对应的只有第一只,第二只,第六只,第十只死亡。其对应位数置1,即为10001 00011

    4、试写一下给类别增加属性的实现。

    -(void)setName:(NSString *)name{
        /*
         objc_AssociationPolicy参数使用的策略:
         OBJC_ASSOCIATION_ASSIGN;            //assign策略
         OBJC_ASSOCIATION_COPY_NONATOMIC;    //copy策略
         OBJC_ASSOCIATION_RETAIN_NONATOMIC;  // retain策略
         
         OBJC_ASSOCIATION_RETAIN;
         OBJC_ASSOCIATION_COPY;
         */
        /*
         关联方法:
         objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy);
         
         参数:
         * id object 给哪个对象的属性赋值
           const void *key 属性对应的key
           id value  设置属性值为value
           objc_AssociationPolicy policy  使用的策略,是一个枚举值,和copy,retain,assign是一样的,手机开发一般都选择NONATOMIC
         */
        objc_setAssociatedObject(self, KEY, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }
    -(NSString*)name{
        return  objc_getAssociatedObject(self, KEY);
    }
    

    5、在一个数组中找出前4个最大的数?请设计一个最优的算法。

    这个题是对于快速排序的考察。

    6、微博每天有10亿条记录,每条记录10-100K。现在你有一台内存为4G的电脑,计算播放最多的一条微博

    相关文章

      网友评论

          本文标题:08-27小记

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