1.而苹果文档指出,cornerRadius
只会默认设置backgroundColor
和border
的圆角,而不会设置content
的圆角,除非同时设置了layer.masksToBounds
为true
(对应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
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个最大的数?请设计一个最优的算法。
这个题是对于快速排序的考察。