zoukankan      html  css  js  c++  java
  • 速度

    https://www.jianshu.com/p/5b81bccd643d

    nit 方法和快捷构造方法的返回类型最好都用 instancetype

    @synthesize 合成实例变量的规则,有以下几点:

    1. 如果指定了成员变量的名称,会生成一个指定的名称的成员变量,

    2. 如果这个成员已经存在了就不再生成了.

    3. 如果是 @synthesize foo; 还会生成一个名称为foo的成员变量,也就是说:

    如果没有指定成员变量的名称会自动生成一个属性同名的成员变量,

    1. 如果是 @synthesize foo = _foo; 就不会生成成员变量了.

    @synthesize lastName = _lastName;

    什么情况下不会autosynthesis(自动合成)?

    1. 同时重写了 setter 和 getter 时
    2. 重写了只读属性的 getter 时
    3. 使用了 @dynamic 时
    4. 在 @protocol 中定义的所有属性
    5. 在 category 中定义的所有属性
    6. 重载的属性

    当你在子类中重载了父类中的属性,你必须 使用 @synthesize 来手动合成ivar。

    // 对象的内存销毁时间表
    // http://weibo.com/luohanchenyilong/ (微博@iOS程序犭袁)
    // https://github.com/ChenYilong
    // 根据 WWDC 2011, Session 322 (36分22秒)中发布的内存销毁时间表 
    
     1. 调用 -release :引用计数变为零
         * 对象正在被销毁,生命周期即将结束.
         * 不能再有新的 __weak 弱引用, 否则将指向 nil.
         * 调用 [self dealloc] 
     2. 子类 调用 -dealloc
         * 继承关系中最底层的子类 在调用 -dealloc
         * 如果是 MRC 代码 则会手动释放实例变量们(iVars)
         * 继承关系中每一层的父类 都在调用 -dealloc
     3. NSObject 调 -dealloc
         * 只做一件事:调用 Objective-C runtime 中的 object_dispose() 方法
     4. 调用 object_dispose()
         * 为 C++ 的实例变量们(iVars)调用 destructors 
         * 为 ARC 状态下的 实例变量们(iVars) 调用 -release 
         * 解除所有使用 runtime Associate方法关联的对象
         * 解除所有 __weak 引用
         * 调用 free()

    NSPredicate

    CoreData

    堆和栈的区别

    怎样使用performSelector传入3个以上参数,其中一个为结构体

    测试:
    my_struct str = (my_struct)(malloc(sizeof(my_struct)));
    str->a = 1;
    str->b = 2;
    HYBObject *obj = [[HYBObject alloc] init];
    obj.arg1 = @"arg1";
    obj.arg2 = @"arg2";
    obj.arg3 = str;
    [self performSelector:@selector(call:) withObject:obj];
    // 在回调时得到正确的数据的

    • (void)call:(HYBObject *)obj {
      NSLog(@"%d %d", obj.arg3->a, obj.arg3->b);
      }

    UITableViewCell上有个UILabel,显示NSTimer实现的秒表时间,手指滚动cell过程中,label是否刷新,为什么?

    在编程中:如果我们把一个NSTimer对象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主运行循环中的时候, ScrollView滚动过程中会因为mode的切换,而导致NSTimer将不再被调度。当我们滚动的时候,也希望不调度,那就应该使用默认模式。但是,如果希望在滚动时,定时器也要回调,那就应该使用common mode。

    解决cell重用的问题


    对于多变的自定义Cell,这种重用机制会导致内容出错,为解决这种出错的方法,把原来的
    UITableViewCell *cell = [tableview dequeueReusableCellWithIdentifier:defineString]
    修改为:UITableViewCell *cell = [tableview cellForRowAtIndexPath:indexPath];
    这样就解决掉cell重用机制导致的问题。


    造成环的根本原因,即堆对堆的引用是产生循环引用的根本原因。
    ** 键路径 **
    键-值编码技术用于进行这样的查找—它是一种间接访问对象属性的机制。例如:

    [self setValue:kShiXiaoColor forKeyPath:@"_placeholderLabel.textColor"];//self是UITextField

     

     如何高性能的给UIImageView加个圆角?(不准说layer.cornerRadius!)
    这题讨论的最多,还有说美工切图就搞定的。答主在项目里做过圆角头像的处理,里面的坑还真不少。cornerRadius会导致offscreen drawing有性能问题,美工切图无法适用有背景图的场景,即使加上shouldRasterize也有cache实效问题。正确的做法是切换到工作线程利用CoreGraphic API生成一个offscreen UIImage,再切换到main thread赋值给UIImageView。这里还涉及到UIImageView复用,圆角头像cache缓存(不能每次都去绘制),新旧头像替换等等逻辑。还有其他的实现方式,但思路离不开工作线程与主线程切换。

    另外一个准则是,可以重复的交互,比如取个数据,跳个页面, 用GET.
    不可以重复的操作, 比如创建一个条目/修改一条记录, 用POST, 因为POST不能被缓存,所以浏览器不会多次提交。

    对于C++来说,虚函数完成了其动态多态的实现。

    super 是一个 Magic Keyword, 它本质是一个编译器标示符,和 self 是指向的同一个消息接受者!他们两个的不同点在于:super 会告诉编译器,调用 class 这个方法时,要去父类的方法,而不是本类里的。

    48. KVC的keyPath中的集合运算符如何使用?

    1. 必须用在集合对象上或普通对象的集合属性上
    2. 简单集合运算符有@avg, @count , @max , @min ,@sum,
    3. 格式 @"@sum.age"或 @"集合属性.@max.age"

    19. 试比较Swift和Objective-C中的初始化方法(init)有什么异同?

    一言以蔽之,Swift中的初始化方法更加严格和准确。

    • Objective-C中,初始化方法无法保证所有成员变量都完成初始化;编译器对属性设置并无警告,但是实际操作中会出现初始化不完全的问题;初始化方法与普通方法并无实际差别,可以多次调用。

    • Swift中,初始化方法必须保证所有optional的成员变量都完成初始化。同时新增convenience和required两个修饰初始化方法的关键词。convenience只是提供一种方便的初始化方法,必须通过调用同一个类中designated初始化方法来完成。required是强制子类重写父类中所修饰的初始化方法。

    KVO“手动触发”的使用场景是什么?一般我们只在希望能控制“回调的调用时机”时才会这么做。

    而“回调的调用时机”就是在你调用 didChangeValueForKey: 方法时。

    3. 请说明并比较以下关键词:atomatic, nonatomic

    • atomic修饰的对象会保证setter和getter的完整性,任何线程对其访问都可以得到一个完整的初始化后的对象。因为要保证操作完成,所以速度慢。它比nonatomic安全,但也并不是绝对的线程安全,例如多个线程同时调用set和get就会导致获得的对象值不一样。绝对的线程安全就要用关键词synchronized。

    • nonatomic修饰的对象不保证setter和getter的完整性,所以多个线程对它进行访问,它可能会返回未初始化的对象。正因为如此,它比atomic快,但也是线程不安全的。

    Swift 支持 map, reduce, filter, flatmap

    https://www.cnblogs.com/muzijie/p/6542650.html

    避免图层混合

    1. 确保控件的opaque属性设置为true,确保backgroundColor和父视图颜色一致且不透明
    2. 如无特殊需要,不要设置低于1的alpha值
    3. 确保UIImage没有alpha通道

    避免临时转换

    1. 确保图片大小和frame一致,不要在滑动时缩放图片
    2. 确保图片颜色格式被GPU支持,避免劳烦CPU转换

    慎用离屏渲染

    1. 绝大多数时候离屏渲染会影响性能
    2. 重写drawRect方法,设置圆角、阴影、模糊效果,光栅化都会导致离屏渲染
    3. 设置阴影效果是加上阴影路径
    4. 滑动时若需要圆角效果,开启光栅化
  • 相关阅读:
    浅析椭圆曲线加密算法(ECC)
    比特币原理——交易与UTXO
    比特币白皮书-学习笔记
    python SMTP邮件发送
    Linux : Forks()
    IS: [=Burp Suite No.4=]Burp Suite /Scanner/ and /Intruder/
    IS: [=Burp Suite No.3=]Burp Suite /Target/ and /Spider/
    IS: [=Burp Suite No.2=]Burp Suite SSL and advanced options
    IS: [=Burp Suite No.1=]Burp Suite install and configuration
    IS: WMIC command use
  • 原文地址:https://www.cnblogs.com/dengchaojie/p/8748214.html
Copyright © 2011-2022 走看看