NSString NSMutableString NSArray NSMutableArray Block 分别用哪些修饰?

网易iOS校招笔试题解析:Runtime、内存管理与多线程核心考点 在移动开发中,理解编程语言的底层运行机制与系统框架设计是成为高级工程师的关键。以Objective-C为例,其Runtime消息转发、内存管理中的引用计数与弱引用表、多线程下的GCD死锁与Block存储区域等概念,共同构成了iOS开发的核心知识体系。掌握这些原理不仅有助于写出高性能且稳定的代码,也是应对大厂技术面试、笔试中高频题目的基础。从日常的App性能优化、网络请求到界面流畅度保障,底层原理的工程价值无处不在。以网易校招iOS试卷为例,系统梳理了笔试中常见的算法题、OC特性、多线程、Runloop以及系 阅读详情

NSString

@property (nonatomic , strong) NSString * strongString;
@property (nonatomic , copy) NSString * mCopyString;
       NSMutableString * tempStr = [[NSMutableString alloc] init];
    [tempStr appendFormat:@"test"];
    self.strongString = tempStr;
    self.mCopyString = tempStr;
    NSLog(@"strongString %p %@",self.strongString,self.strongString);
    NSLog(@"mCopyString %p %@",self.mCopyString,self.mCopyString);
    [tempStr appendFormat:@"change"];
    NSLog(@"strongString %p %@",self.strongString,self.strongString);
    NSLog(@"mCopyString %p %@",self.mCopyString,self.mCopyString);

以下是打印结果

2017-11-19 16:52:30.307674+0800 test[4346:378408] strongString 0x600000256b60 test
2017-11-19 16:52:30.307840+0800 test[4346:378408] mCopyString 0xa000000747365744 test
2017-11-19 16:52:30.307943+0800 test[4346:378408] strongString 0x600000256b60 testchange
2017-11-19 16:52:30.308060+0800 test[4346:378408] mCopyString 0xa000000747365744 test

结论: NSString 是不可变字符串,修饰的时候应该用 copy 修饰,这样它的值不会发生改变

NSMutableString

//如果这样修饰会出现什么问题呢?
@property (nonatomic , copy) NSMutableString * mCopyString;
    self.mCopyString = [[NSMutableString alloc] init];
    [self.mCopyString appendFormat:@"test"];

会这样报错

2017-11-19 16:58:24.268556+0800 test[4403:382549] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with appendFormat:'
*** First throw call stack:

借着这个例子我们说下 copy

copy:建立一个引用计数为1的对象,然后释放原有对象;常常用于NSString/NSArray/NSDictionary(不可变)。在赋值时传入值的一份拷贝,拷贝工作由copy方法执行
其实这里给 NSString 进行赋值的对象是 NSString 那就和 strong 是一样的,如下:

@property (nonatomic , copy) NSString * mCopyString;
    NSString * tempStr = @"test";
    NSLog(@"%p %@",tempStr,tempStr);
    self.mCopyString = tempStr;
    NSLog(@"%p %@",self.mCopyString,self.mCopyString);
2017-11-19 17:10:12.655578+0800 test[4507:390294] 0x1016d4098 test
2017-11-19 17:10:12.655740+0800 test[4507:390294] 0x1016d4098 test

如果是可变的,就会 copy 一份

@property (nonatomic , copy) NSString * mCopyString;
    NSMutableString * tempStr = [[NSMutableString alloc] init];
    [tempStr appendFormat:@"test"];
    NSLog(@"%p %@",tempStr,tempStr);
    self.mCopyString = tempStr;
    NSLog(@"%p %@",self.mCopyString,self.mCopyString);
2017-11-19 17:07:55.904637+0800 test[4490:388984] 0x60400045c7d0 test
2017-11-19 17:07:55.904808+0800 test[4490:388984] 0xa000000747365744 test

NSArray

@property (nonatomic , copy) NSArray * mCopyArray;
@property (nonatomic , strong) NSArray * mStrongArray;
    NSArray * mArray = @[@"1",@"2"];
    NSLog(@"mArray %p %@",mArray,mArray);
    self.mCopyArray = mArray;
    NSLog(@"self.mCopyArray %p %@",self.mCopyArray,self.mCopyArray);

    NSMutableArray * mMutableArray = [[NSMutableArray alloc] init];
    [mMutableArray insertObject:@"1" atIndex:0];
    NSLog(@"mMutableArray %p %@",mMutableArray,mMutableArray);
    self.mCopyArray = mMutableArray;
    NSLog(@"self.mCopyArray %p %@",self.mCopyArray,self.mCopyArray);
    [mMutableArray insertObject:@"2" atIndex:0];
    NSLog(@"self.mCopyArray %p %@",self.mCopyArray,self.mCopyArray);

    NSMutableArray * mStrongArray = [[NSMutableArray alloc] init];
    [mStrongArray insertObject:@"1" atIndex:0];
    NSLog(@"mStrongArray %p %@",mStrongArray,mStrongArray);
    self.mStrongArray = mStrongArray;
    NSLog(@"self.mStrongArray %p %@",self.mStrongArray,self.mStrongArray);
    [mStrongArray insertObject:@"2" atIndex:0];
    NSLog(@"self.mStrongArray %p %@",self.mStrongArray,self.mStrongArray);

打印结果

2017-11-19 17:19:04.207782+0800 test[4664:398783] mArray 0x60400003a720 (
    1,
    2
)
2017-11-19 17:19:04.208416+0800 test[4664:398783] self.mCopyArray 0x60400003a720 (
    1,
    2
)
2017-11-19 17:19:04.208703+0800 test[4664:398783] mMutableArray 0x604000252a50 (
    1
)
2017-11-19 17:19:04.210955+0800 test[4664:398783] self.mCopyArray 0x604000009650 (
    1
)
2017-11-19 17:19:04.211328+0800 test[4664:398783] self.mCopyArray 0x604000009650 (
    1
)
2017-11-19 17:19:04.211413+0800 test[4664:398783] mStrongArray 0x604000252bd0 (
    1
)
2017-11-19 17:19:04.211483+0800 test[4664:398783] self.mStrongArray 0x604000252bd0 (
    1
)
2017-11-19 17:19:04.211551+0800 test[4664:398783] self.mStrongArray 0x604000252bd0 (
    2,
    1
)

结论: NSArray 使用 copy 修饰时,如果赋值对象是不可变数组,那么相当于直接 retain , 如果是 可变数组 , 那么会 copy 一份并且 retain
但是 NSArray 如果使用 strong 赋值,那么,可能会出现一些 bug: 如果赋值对象是可变数组, 可变数组改变了值, NSArray 也会一样改变

NSMutableArray

@property (nonatomic , copy) NSMutableArray * mMutableArray;
    self.mMutableArray = [[NSMutableArray alloc] init];
    [self.mMutableArray insertObject:@"1" atIndex:0];
2017-11-19 17:23:45.441256+0800 test[4682:401433] -[__NSArray0 insertObject:atIndex:]: unrecognized selector sent to instance 0x600000007e80
(lldb) 

结论: NSMutableArray 需要使用 strong 修饰

NSDictionary

同理 NSArray

@property (nonatomic , copy) NSDictionary * mCopyDictionary;
@property (nonatomic , strong) NSDictionary * mStrongDictionary;
    NSDictionary * mDict = @{@"xiaoli":@"123"};
    NSLog(@"mDict %p %@",mDict,mDict);
    self.mCopyDictionary = mDict;
    NSLog(@"self.mCopyDictionary %p %@",self.mCopyDictionary,self.mCopyDictionary);

    NSMutableDictionary * mMutableDict = [[NSMutableDictionary alloc] init];
    [mMutableDict setObject:@"456" forKey:@"xiaowang"];
    NSLog(@"mMutableArray %p %@",mMutableDict,mMutableDict);
    self.mCopyDictionary = mMutableDict;
    NSLog(@"self.mCopyArray %p %@",self.mCopyDictionary,self.mCopyDictionary);
    [mMutableDict setObject:@"789" forKey:@"xiaoming"];
    NSLog(@"self.mCopyArray %p %@",self.mCopyDictionary,self.mCopyDictionary);


    NSMutableDictionary * mStrongDict = [[NSMutableDictionary alloc] init];
    [mStrongDict setObject:@"xiaoli" forKey:@"125"];
    NSLog(@"mStrongArray %p %@",mStrongDict,mStrongDict);
    self.mStrongDictionary = mStrongDict;
    NSLog(@"self.mStrongArray %p %@",self.mStrongDictionary,self.mStrongDictionary);
    [mStrongDict setObject:@"xiaoli" forKey:@"999"];
    NSLog(@"self.mStrongArray %p %@",self.mStrongDictionary,self.mStrongDictionary);
2017-11-19 17:32:04.841820+0800 test[4728:406099] mDict 0x60000003eda0 {
    xiaoli = 123;
}
2017-11-19 17:32:04.842005+0800 test[4728:406099] self.mCopyDictionary 0x60000003eda0 {
    xiaoli = 123;
}
2017-11-19 17:32:04.842179+0800 test[4728:406099] mMutableArray 0x60400003dd80 {
    xiaowang = 456;
}
2017-11-19 17:32:04.842351+0800 test[4728:406099] self.mCopyArray 0x604000230e00 {
    xiaowang = 456;
}
2017-11-19 17:32:04.842500+0800 test[4728:406099] self.mCopyArray 0x604000230e00 {
    xiaowang = 456;
}
2017-11-19 17:32:04.842631+0800 test[4728:406099] mStrongArray 0x60000003efe0 {
    125 = xiaoli;
}
2017-11-19 17:32:04.842737+0800 test[4728:406099] self.mStrongArray 0x60000003efe0 {
    125 = xiaoli;
}
2017-11-19 17:32:04.842842+0800 test[4728:406099] self.mStrongArray 0x60000003efe0 {
    125 = xiaoli;
    999 = xiaoli;
}

结论: NSDictronary 用 copy 修饰

NSMutableDictronary

@property (nonatomic , copy) NSMutableDictionary * mMutableDict;
    self.mMutableDict = [[NSMutableDictionary alloc] init];
    [self.mMutableDict setObject:@"xiaoli" forKey:@"123"];
2017-11-19 17:34:57.436056+0800 test[4746:407822] -[__NSFrozenDictionaryM setObject:forKey:]: unrecognized selector sent to instance 0x60000003a980
(lldb) 

结论: NSMutableDictionary 用 strong 修饰

Block

货拉拉iOS笔试题深度解析:底层原理与工程实践 从iOS开发者必须掌握的底层概念出发,理解内存管理的引用计数、RunLoop的事件循环以及多线程的并发机制。本文以真实笔试题为切入点,剖析面试官对知识点深度的考察逻辑,展示Block循环引用、KVO触发机制、死锁陷阱等高频考点的应对方法。同时,结合iOS开发者app证书更新、ios混合开发方案等工程实践场景,帮助读者将基础原理应用于性能优化与崩溃排查,构建系统化的iOS知识体系,从容应对面试与实际项目中的复杂问题。 阅读详情

相关推荐

2017年欢聚iOS校招笔试题解析:底层原理与高频考点全拆解

在iOS开发中,语言特性和系统原理是技术面试的核心考察方向。无论技术框架如何迭代,Runtime的消息机制、GCD的并发模型、内存管理的属性修饰符等底层知识,始终是衡量工程师基本功的标尺。理解这些概念,不仅能应对校招笔试中的高频算法题与多线程场景,更能帮助开发者从原理层面排查线上问题、优化App性能。本文以一份2017年欢聚时代的iOS工程师校招A卷为切入点,梳理从Objective-C到Swift时代依然适用的知识体系,涵盖Runtime、GCD、内存管理、数据结构等关键考点,为准备iOS面试的开发者提供

weixin_34124651的博客 510

NSMutableArray 与 block

如果局部变量是数组或者指针的时候只复制这个指针,两个指针指向同一个地址,block只修改指针上的内容。如: NSMutableArray *mArray = [NSMutableArray arrayWithObjects:@"a",@"b",@"abc",nil];     NSMutableArray *mArrayCount = [NSMutableArray arr

bravegogo的专栏 2836

Objective-C入门指南:从环境搭建到实战项目开发

面向对象编程是现代软件开发的核心范式之一,它通过封装、继承和多态等机制组织代码,提升可维护性和复用性。在iOS/macOS生态中,Objective-C作为基于C语言的面向对象语言,其独特的消息传递机制和动态运行时特性,为理解Cocoa Touch框架的底层原理提供了关键视角。掌握Objective-C不仅能帮助开发者深入理解iOS系统框架的设计哲学,还能有效维护和迭代大量存量项目代码,尤其是在处理内存管理、与C/C++库桥接以及调试经典崩溃场景时具有不可替代的价值。对于希望夯实iOS开发基础、进入中大型团

weixin_30580341的博客 317

NSString转NSArray

两种方法:主要是对一串字符或者句子以字符转换为数组 方法一: 可以分割字母字符串或者汉字字符串 NSMutableArray*array1=[NSMutableArray new];    NSString *str = @"uuuu";    for (int i = 0;i ; i++){        NSString *firstStr=[str substringWi

guofeifei1017的博客 1840

iOS面试核心考点:内存管理、RunLoop与runtime实战解析

iOS开发中,内存管理与多线程机制是构建流畅应用的核心基石。理解weak指针在运行时全局表中的自动置空原理,掌握RunLoop的mode切换对定时器的影响,以及GCD同步派发引发的死锁场景,是应对中高级面试的关键。这些底层知识在直播类高并发场景下尤为重要——弹幕高频刷新、心跳常驻线程、动态方法解析,每一个难题都指向对引用计数、运行时消息转发和界面优化框架的深入理解。通过拆解欢聚时代笔试B卷的典型考点,结合对象池复用、Safe Area适配和崩溃符号化等实战经验,帮助开发者建立从原理到工程实践的完整认知,从容

weixin_34186128的博客 385

详解各类以太网标准10BASE-T/100BASE-T4/100BASE-FX/1000BASE-X等

以太网是现实世界中最普遍的一种计算机网络。以太网有两类:第一类是经典以太网,第二类是交换式以太网,使用了一种称为交换机的设备连接不同的计算机。经典以太网是以太网的原始形式,运行速度从3-10 Mbps不等;而交换式以太网正是广泛应用的以太网,可运行在100Mbps、1000Mbps和10000Mbps高速率,分别以快速以太网、千兆以太网和万兆以太网的形式呈现

不积跬步,无以至千里! 5万+

iOS NSDictionary 内部原理、 深浅复制、kvc与setObject问题

一:字典内部原理 二:key的copy问题 三:kvc与setobject forkey问题 / setValue forkey 和 setObject forkey问题 一:字典内部原理 NSDictionary使用原理 1.NSDictionary(字典)是使用hash表来实现key和value之间的映射和存储的,hash函数设计的好坏影响着数据的查找访问效率。 ...

qq_27909209的博客 7140

从Mule ESB到Apache Camel:手把手教你设计一个轻量级企业集成框架的‘心脏’

本文深入探讨了从Mule ESB到Apache Camel的轻量级企业集成框架设计实践,对比了两者在协议支持、消息处理能力和部署灵活性等方面的差异。通过实际代码示例和性能优化技巧,帮助开发者构建高效的核心模块,适用于现代微服务架构下的系统集成需求。

weixin_28738165的博客 374

将NSString字符串转换为NSArray数组,componentsSeparatedByString,将array数组转换为string字符串,componentsJoinedByString

将string字符串转换为array数组 NSString *a = [[NSString alloc] initWithString : @"冬瓜,西瓜,火龙果,大头,小狗" ];     NSArray *b = [a componentsSeparatedByString:@","];     NSString *a3 = [b objectAtIndex:2];

xxc的专栏 6033

RTAB-map:实时高效的SLAM库

Real‐time appearance‐based mapping (RTAB‐Map)是一种基于外观的闭环检测方法,具有良好的内存管理,以满足处理大场景和在线长周期管理要求。RTAB‐Map集成了视觉和激光雷达SLAM方案,并支持目前绝大多数的传感器 是一个强大的、开源的Simultaneous Localization and Mapping(SLAM)库,专为机器人和无人驾驶领域设计。它提供了一套完整的解决方案,用于构建三维地图,并在未知环境中进行实时定位与导航。 github项目地址 RTAB-

weixin_45761399的博客 1万+

深入解析Unity3D中PostLateUpdate突然占用大量时间的原因

在Unity3D的生命周期中,是一个在LateUpdate之后被调用的方法。它通常用于处理一些需要在所有更新(包括物理更新和动画更新)之后进行的逻辑。由于它在游戏循环的后期阶段被调用,因此它通常用于处理与渲染直接相关的任务,如相机调整、UI更新等。突然占用大量时间的问题可能由多种原因引起,包括复杂的逻辑处理、频繁的资源加载、不恰当的渲染优化、插件或第三方库的副作用以及内存泄漏或垃圾回收等。为了解决这个问题,开发者需要仔细审查和优化中的代码,同时利用Unity提供的工具来监控和分析游戏性能。

Yori_22的博客 979

iOS内存管理(6)--NSArray与NSMutableArray用copy修饰还是strong

一、NSMutableArray 被copy、strong修饰后的变化: 把NSMutableArray用copy修饰有时就会crash,因为对这个数组进行了增删改操作,而copy后的数组变成了不可变数组NSArray,没有响应的增删改方法,所以对其进行增删改操作就会报错。 举例如下: (1)copy: @property (nonatomic, copy  ) NS

Winzlee的专栏 2万+

手把手教你设计STM32的JTAG电路:从原理图到PCB布局(含JLINK连接详解)

本文详细介绍了STM32的JTAG电路设计全流程,从核心原理、接口规范到PCB布局布线技巧,特别包含JLINK调试器的连接与配置方法。通过信号滤波、上拉配置和防反接保护等关键设计要点,帮助开发者构建稳定可靠的JTAG调试环境,提升嵌入式开发效率。

weixin_29159441的博客 388

黑马程序员——ObjC基础—其他封装

-----------Java培训、Android培训、IOS培训、.Net培训、期待与您交流!------------  本节来学习一下OC中对基本数据类型以及代码块的封装。 1、Block封装 在OC中,采用Block代码块来对c语言函数进行封装,以扩充c函数的适用范围,我们用c语言定义一个sum函数: int sum(int a, int b){ retu

qq_25842885的专栏 488

高通Camx功能feature分析之八:高通NCS服务之架构和初始化

本文介绍了高通NCS(NONCameraSensor)服务的架构与初始化流程。NCS服务通过QMI接口访问非相机传感器,为CameraEIS、AEC等算法节点提供陀螺仪、加速度计等传感器数据支持。文章详细解析了NCS服务的分层架构,包括客户端、服务端、QSEE接口实现等组件,并重点分析了初始化过程中获取传感器列表、查询能力等关键步骤。通过camxsetting.xml中的enableNCSService开关控制服务启动,初始化过程涉及QSEE单例创建、传感器能力查询等核心操作。后续文章将继续深入讲解相关技术

925

复旦微实现串口在线升级BOOT.BIN

将该 demo 生成的 app(升级用)和 fsbl、最简化 bit 文件(可选)打包成 BOOT.BIN,作为 golden image 烧写在 qspi flash 偏移 0 地址开始的位置,其中最简化 bit 文件为在线升级功能提供必要的物理通道(如果不需要,可以不打包该文件),golden image 一旦发布基本不需要进行升级,由该 golden image 负责和上位机进行通信交互,完成业务 app、业务 bit 文件、uboot 以及操作系统 image 等文件在线升级,在qspi flash

wangjie36的博客 3174

Object-C基础语法

大致包括了OC的基本语法

2301_77900444的博客 271

一文搞懂鲸鱼优化算法Whale Optimization Algorithm(WOA)!!!(核心原理+数学模型+代码实战+实际应用)

本文详细介绍了鲸鱼优化算法(WOA)的原理与实现。该算法模拟座头鲸气泡网捕食行为,通过包围猎物、螺旋攻击和随机搜索三种策略平衡全局探索与局部开发。文章首先从生物学角度解释鲸鱼捕食行为,然后给出算法的数学模型和完整流程,包括关键公式和决策逻辑。最后通过Python代码实例演示如何求解Sphere函数最小值,展示算法的实际应用。WOA具有结构简单、参数少等优点,在工程优化、机器学习等领域有广泛应用前景。

qq_42212808的博客 1011

顺丰科技秋招iOS客观题深度剖析:内存管理与多线程核心考点

在iOS开发中,内存管理、多线程与RunLoop是决定应用性能与稳定性的基石,也是面试中高频考察的核心能力。理解ARC底层机制、GCD队列与锁的选择、响应链与事件传递,是开发者从基础迈向工程实践的关键。从通用技术原理出发,结合物流场景对客户端稳定性的高要求,系统梳理这些知识点有助于构建完整的知识图谱。本内容围绕顺丰科技秋招iOS客观题合集,深入解析笔试背后的考察逻辑与技术模型,帮助开发者以题目为索引,吃透底层机制,提升面试竞争力。

weixin_33762130的博客 514

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

360春招笔试iOS客观题复盘:内存管理、Runtime与多线程核心考点解析

iOS开发工程师的校招笔试,尤其是一线大厂的客观题,考察的往往不是单纯的编码能力,而是对底层基础原理的深度理解。从Objective-C语言特性到内存管理、Runtime消息机制、多线程与Runloop,这些技术概念构成了iOS开发的核心地基。理解引用计数与循环引用、掌握消息发送链路与动态方法解析、熟悉GCD队列与线程安全,是排查崩溃、优化性能、保证应用稳定运行的关键技能。在实际开发与面试场景中,这些原理经常被转化为代码阅读题、场景判断题和多选题,成为筛选候选人的高区分度考点。本文以360 2018春招笔试

weixin_34343000的博客 320

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

360 iOS校招笔试客观题复盘:内存管理、Runtime与多线程考点精讲

在iOS开发中,内存管理、Runtime机制与多线程并发是技术笔试中的核心考查方向,也是衡量开发者是否具备体系化基础能力的重要标准。理解ARC与MRC的差异、weak与strong的底层逻辑、消息转发流程以及GCD与NSOperation的执行特性,不仅能帮助解决实际工程中的内存泄漏与线程死锁问题,更是面试与校招中高频出现的知识难点。同时,Objective-C语法细节、Foundation框架的拷贝语义与网络层TCP/HTTPS原理,也常以客观题形式考察候选人的理解深度。本文围绕360公司2019年校招笔

weixin_34203832的博客 342

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

爱奇艺iOS秋招笔试真题解析:考点拆解与备战策略

iOS开发者在准备大厂笔试时,常面临知识点庞杂、考察深度不确定的困境。从语言基础到内存管理,从并发编程到网络架构,每一环节都可能成为失分点。其中,ARC的循环引用、GCD队列死锁、Runloop机制等是高频考点,也是实战中容易踩坑的技术细节。理解这些原理不仅有助于应对笔试题,更能提升工程代码的健壮性。值得注意的是,笔试往往通过变体题型考察候选人的真实理解,而非单纯记忆。因此,构建系统化的知识树、掌握结构化答题方法、在项目中沉淀技术亮点,是高效备战的三大支柱。本文以爱奇艺一套经典秋招笔试为样本,拆解考点背后的

weixin_34013044的博客 369

2018货拉拉iOS笔试题复盘:底层原理与架构设计要点解析

从iOS开发最基础的内存管理和多线程机制出发,理解属性修饰符、Block捕获、RunLoop运行模式等核心原理,是解决日常崩溃和卡顿问题的关键。这些底层概念不仅决定了App的性能表现,也影响着网络层封装、数据缓存及架构选型等工程实践。在实际面试中,面试官往往通过一道综合性笔试题考察候选人对整个iOS开发链路的认知深度。比如货拉拉秋招这套卷三(B),就将OC底层、GCD死锁、Runtime消息转发与架构设计结合,引导开发者从原理出发思考工程方案。本文复盘这套经典笔试题,梳理高频考点与答题思路,帮助正在准备iO

weixin_34267123的博客 378

爱奇艺iOS笔试题复盘:从OC内存管理到Runtime的考点全解析

在移动开发求职中,技术笔试往往从基础原理与工程实践的结合点出题。理解Objective-C的内存管理机制、Runtime消息传递、RunLoop运行循环以及多线程协作方式,不仅是应对大厂笔试的关键,也是解决真实业务问题的基础。本文结合爱奇艺2019秋招iOS方向笔试题,提炼了高频考点:属性修饰符与循环引用、copy语义、weak实现原理、消息转发流程、线程任务组织、HTTP缓存策略,以及链表反转、两数之和等算法题。同时强调边界处理和复盘方法,帮助你从笔试准备到面试输出形成完整闭环。

weixin_34099526的博客 415

有关copy关键字的一些问题

整理的一些有关copy关键字的解释、用法及相关注意事项。

ybcy0612的博客 645

Objective-C入门指南:iOS开发基石与Swift混编实战

面向对象编程是现代软件开发的核心范式,它通过封装、继承和多态等机制组织代码。在iOS/macOS生态中,Objective-C作为C语言的超集,其独特的消息传递机制和动态运行时特性,构成了Cocoa和Cocoa Touch框架的设计哲学基础。理解Objective-C的原理,不仅能帮助开发者深入掌握内存管理、引用循环等底层机制,更能无缝对接海量存量代码库,提升解决复杂问题的能力。在实际工程中,掌握Objective-C与Swift的混编技巧,是维护大型项目、集成第三方库的关键。本文聚焦Objective-C

weixin_33881140的博客 470
上一篇: retain 和 assign 的区别使用
下一篇: (深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)
lin_transform
博客等级 码龄9年 3粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值