iOS学习笔记(8-23)

1.异步改同步,要求Aaa,Bbb,Ccc等顺序打印,要求多种方法

Aaa;
AsyncNetRequest^(id response){
   // use response
   Bbb;
}
ccc;
ddd;
fff;
...等

让异步改成同步,其实主要的思想就是用阻塞线程的方式。主要可以用下面的方式。
1.dispatch_semaphore_t信号量来控制请求顺序 dispatch_semaphore_signal()信号加1 dispatch_semaphore_wait()信号减1。

[super viewDidLoad];
 
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

 [self methodC:^{
     dispatch_semaphore_signal(semaphore);
 }];
 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

 [self methodB:^{
     dispatch_semaphore_signal(semaphore);
 }];
 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

 [self methodA:^{
     dispatch_semaphore_signal(semaphore);
 }];
 [self methodD:^{
     dispatch_semaphore_signal(semaphore);
 }];
 
 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
 dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

 [self method];
  1. 用while循环阻塞线程 达到异步改同步的效果
- (void)viewDidLoad {
    [super viewDidLoad];
 
    NSLog(@"%@",[self nameStr]);
    NSLog(@"next");
}
- (NSString *)nameStr{
    
    NSString __block * nameStr = @"小红";
    
    __block BOOL _sleep = YES;
    
    [self method:^(NSString *name) {
        nameStr = name;
        NSLog(@"1");
        _sleep = NO;
        NSLog(@"3");
    }];
    while (_sleep) {
       //while循环等待阻塞线程
        
    }
    NSLog(@"2");
    
    return nameStr;
}

3.利用dispatch_group_t 调度组 异步改同步 代码如下

- (NSString *)nameStr{

   __block  NSString  * nameStr = @"小红";

    dispatch_group_t group = dispatch_group_create();
    dispatch_group_enter(group);

    [self method:^(NSString *name) {
        nameStr = name;
        dispatch_group_leave(group);
    }];
    
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
    return nameStr;
}

2.写出以下代码的打印顺序

int main()
{
    print Aaa;
    dispatch_after_delay(1秒, ^{
       // use response
       print Bbb;
    }
    print ccc;
    return 0;
}

会打印 Aaa和ccc,不会打印Bbb。原因就是这个不会开启NSRunLoop,程序按照顺序执行,所以在这个方法里,使用NSTimer也不会执行。


3.NSDictionary、NSArray我们比较常用,那么它们分别的实现逻辑是怎么样的?C++的STL是什么?

STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。


4.有一个UITabelView,有一千个网络图片需要用tableview来做一个列表的加载,cell有一个imageview用sdwebimage去显示图片。它首先会加载前边几个网络图片,如果滑动到底部,又会优先加载底部的网络图片,滑到中间又会优先加载中间的网络图片,它总是能优先加载当前看到区域的这些cell的图片,这是一个什么样的原理?


5.YYCache的原理说一下?


6.UIView和CALayer的关系是什么?CALayer有一个属性叫content,它是一个什么类型的?一般画一个渐变图片用什么layer?layer的mask是什么类型的?

CALayer有如下子类:


CALayer的子类一览

UIViewCALayer的关系:UIView负责处理用户交互,负责绘制内容的则是它持有的那个CALayer,我们访问和设置UIView的这些负责显示的属性实际上访问和设置的都是这个CALayer对应的属性,UIView只是将这些操作封装起来了而已。contents是一个类型为id的属性,在iOS开发中,可以利用这个属性给CALayer设置backing image
根据上图我们可以知道,设置渐变图片的时候,我们可以使用CAGradientLayer这个子类。
在代码的注释中:

/* A layer whose alpha channel is used as a mask to select between the
 * layer's background and the result of compositing the layer's
 * contents with its filtered background. Defaults to nil. When used as
 * a mask the layer's `compositingFilter' and `backgroundFilters'
 * properties are ignored. When setting the mask to a new layer, the
 * new layer must have a nil superlayer, otherwise the behavior is
 * undefined. Nested masks (mask layers with their own masks) are
 * unsupported. */

  将其alpha通道用作蒙版的图层,以在图层的背景和将图层内容与其过滤背景进行合成的结果
  之间进行选择。 默认为nil。 当用作蒙板时,图层的“compositingFilter”和
  “backgroundFilters”属性将被忽略。 将遮罩设置为新图层时,新图层必须有一个nil的图层,
  否则行为未定义。 不支持嵌套蒙版(带有自己蒙版的蒙版图层)。

@property(nullable, strong) CALayer *mask;

也可以这么理解:

  • 是一个可选的layer,它的alpha通道用于遮罩图层的内容。图层的Alpha通道决定了有多少的图层的内容和背景的显示通过。 完全或部分不透明的像素允许底层内容显示,但完全透明的像素屏蔽该内容。
  • 这个属性的默认值是nil。 配置mask时,请记得设置遮罩层的大小和位置,以确保遮罩层与它遮罩的层正确对齐。
  • 您分配给此属性的图层不能有父图层。否则行为是不确定的。
  • 遮罩层必须至少有两个图层,上面的一个图层为“遮罩层”,下面的称“被遮罩层”;这两个图层中只有相重叠的地方才会被显示。也就是说在遮罩层中有对象的地方就是“透明”的,可以看到被遮罩层中的对象,而没有对象的地方就是不透明的,被遮罩层中相应位置的对象是看不见的。
    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.frame = CGRectMake(100, 300, 200, 25);
    [gradientLayer setStartPoint:CGPointMake(0.0, 0.0)];
    [gradientLayer setEndPoint:CGPointMake(0.0, 1.0)];
    gradientLayer.colors = @[(id)[UIColor redColor].CGColor, (id)[UIColor 
   yellowColor].CGColor,(id)[UIColor blueColor].CGColor];
    
    UILabel *label = [[UILabel alloc] initWithFrame:gradientLayer.bounds];
    label.text = @"红黄蓝渐变~~";
    label.font = [UIFont boldSystemFontOfSize:25];
    label.backgroundColor = [UIColor clearColor];
    [self.view addSubview:label];
    
    [self.view.layer addSublayer:gradientLayer];
    gradientLayer.mask = label.layer;
渐变颜色

7.NSNumber是一种什么设计模式

NSNumber内部是通过Tagged Pointer存储的。

  • Tagged Pointer专门用来存储小的对象,列入NSNumberNSDate.
  • Tagged Pointer指针的值不再是地址了,而是真正的值。所以,实际上它不再是一个对象了,它只是一个披着对象皮的普通变量而已!所以,它的内存并不存储在堆中,也不需要malloc和free。
    iOS SDK中使用抽象工厂方法的例子是NSNumber

8.请实现求根公式

int main()
{
   my_sqrt(2);
   return 0;
}

float my_sqrt(float val)
{
}
//输入 2
//输出 1.414
  • 二分法
    这种是最简单的,就是定义一个最小值0和最大值number,把一个数取一个中间值(0+number)/2,然后平方,如果平方大于该数值,就把中间值赋给最大值,否者就把中间值赋给最小值,一直循环,直到取到想要的精度为止。
double sqrt1(double x){
    double EPSINON = 0.00001;
    double low = 0.0;
    double high = x;
    double mid = (low + high) / 2;
    while ((high - low) > EPSINON){
        if (mid*mid > x){
            high = mid;
        }
        else{
            low = mid;
        }
        mid = (high + low) / 2;
    }
    return mid;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351