2022加油(fmy)

2022-03-17  本文已影响0人  喜剧收尾_XWX

2022加油(fmyz)

一、基础

1.说出常用的属性修饰关键字

原子性和非原子性

读写属性

内存属性

2.atomic原子性是绝对线程安全的么?

3.说下Category原理,以及为什么只能添加方法不能添加属性?

struct category_t {
    const char *name;
    classref_t cls;
    struct method_list_t *instanceMethods; // 对象方法
    struct method_list_t *classMethods; // 类方法
    struct protocol_list_t *protocols; // 协议
    struct property_list_t *instanceProperties; // 属性
    // Fields below this point are not always present on disk.
    struct property_list_t *_classProperties;
    method_list_t *methodsForMeta(bool isMeta) {
        if (isMeta) return classMethods;
        else return instanceMethods;
    }
    property_list_t *propertiesForMeta(bool isMeta, struct header_info *hi);
};

4.load 和 initialize的区别

(1)调用时机:

(2)调用顺序:

(3)调用方式

(4)实际使用

5.分类和扩展之间的区别

(1)Category

(2)Extension

(3)区别

6.多个分类中都有相同的方法名,执行那个分类?

7.给Category设置关联对象实现原理

8.控制器的生命周期

参考链接

9.怎么样让自己的对象用copy修饰

10.如何创建一个单例

static DataManager *manager = nil;

@implementation DataManager

+ (instancetype)shareManager{
   static dispatch_once_t onceToken;
   dispatch_once(&onceToken, ^{
       manager = [[self alloc] init];
   });
   return manager;
}
@end

+ (id)allocWithZone:(struct _NSZone *)zone{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [super allocWithZone:zone];
    });
    return manager;
}

3.不小心调用了copy、mutableCopy方法(需要实现NSCopyingNSMutableCopying协议实现copyWithZonemutableCopyWithZone代理方法,否则崩溃)

- (nonnull id)copyWithZone:(nullable NSZone *)zone {
    return manager;
}

- (nonnull id)mutableCopyWithZone:(nullable NSZone *)zone {
    return manager;
}

参考链接

二、项目架构

1.RAC关键字用法

三、网络类

1.讲一下https通信过程

参考链接

四、内存管理

1.内存中的五大区

2.内存管理方式

(1)TaggedPointer

(2)NONPOINTER_ISA(非指针型的ISA)

(3) SideTables 散列表

3.ARC&MRC

ios开发中是通过引用计数来进行对象内存管理的。主要分为两种方式

以下是MRC中常用到的几个关键字

4.weak的实现原理

弱引用表结构

   struct weak_table_t {
    // 保存了所有指向指定对象的 weak 指针
    weak_entry_t *weak_entries;
    // 存储空间
    size_t    num_entries;
    // 参与判断引用计数辅助量
    uintptr_t mask;
    // hash key 最大偏移值
    uintptr_t max_hash_displacement;
};

5.什么情况下会导致内存泄漏

五、Block

1.block用什么关键字修饰?

参考链接

六、进程线程

1. 进程和线程区别

七、cocoapods

八、RunLoop

1.自动释放池与runloop关系?

2.请指出下面这段代码问题

 for (int i = 0; i < 10000; i++ ) {
        NSString *str = @"ABC";
        str = [str lowercaseString];
        str = [str stringByAppendingString:@"xyz"];
        NSLog(@"%@",str);
    }
for ( int i = 0 ; i < 10000 ; ++ i ) {
   @ autoreleasepool {
     NSString *str = @"Abc" ;
     str = [ str lowercaseString ] ;
     str = [ str stringByAppendingString : @"xyz" ] ;
      
     NSLog ( @"%@" , str ) ;
   }
}

九、性能优化

1.降低app包大小

2. 正确的复用cell

3.APP的启动优化

优化的时候会将优化以main()函数为界分为2个部分,即main之前的pre-main阶段 和 main()之后。

(1) pre-main阶段这个阶段是由dyld(动态连接器)来操作的,设置DYLD_PRINT_STATISTICS进行检测这个阶段耗时。

(2) 在main()函数之后的优化就因项目不同而异了,大致有这么几个核心:

文章参考

上一篇 下一篇

猜你喜欢

热点阅读