iOS工程师面试深入浅出(OC)- @property 使用方法?Copy 什麽时候用?

iOS工程师面试深入浅出(OC)- @property 使用方法?Copy 什麽时候用?

如果本来是在写 swift,突然看到 @property 一定会不知道这是在做什麽的,为什麽我宣告一个 property 需要设定这麽多个参数? 其实 swift 为了开发者方便,对property 的设定而省略了,这或许是语言上的一个进步吧。

对於 Objective-C 来说,这是个非常基础的知识,如果你现在写的是 Objective-C 却对 @property的知识无法掌握,可以说对於开发 Objective-C 还有一段距离。也因为如此,这题 “@property 使用方法?Copy 什麽时候用?”如此重要,如果这个问题答不出来,也就代表几乎无法开发 Objective-C,面试上很有可能被筛选掉。
ps:如果你是使用 iVar的元老工程师当然另当别论。

这题是在问什麽?

这题就是想要知道,你对 @property的参数了解多少,在实际的案例中如何去运用。

面试怎麽回答?

这题不是什麽高深得技术,不用详述太多,只要让面试官知道你对於这个观念是理解的即可。

1. 简述 @property 有哪些常用的参数

可以先简述 @property 有哪些常用的参数,如: [atomic,nonatomic,weak,strong,assign,copy]

2. 从运用场景回答问题:

nonatomic 比较有效率,在实际运用上,基本上参数都会带 nonatomic。
如果 property 希望被持有就用 strong ,否则 weak。
mutable 属性类型,如果属性不想被其他关联改变时,应该用copy。
用来修饰非物件与非指标,如:int,BOOL,float。

3.如果面试官再追问细节可以这样回答:

「atomic的作用只是给getter和setter加了个锁」。也就是说,有线程在访问setter,其他线程只能等待完成後才能访问。
strong 只能使用在物件类型。基本数据类型(非对像类型,如int, float, BOOL),默认值并不是strong。
weak 被引用时 retain count 不会加1。当物件被销毁时,该property 会变 nil。
所有有mutable(可变)版本的属性类型,如NSString, NSArray, NSDictionary等等——他们都有可变的版本类型:NSMutableString, NSMutableArray, NSMutableDictionary。这些类型在属性赋值时,右边的值有可能是它们的可变版本。这样就会出现属性值被意外改变的可能。所以它们都应该用copy。

可以参考之前分享的文章:
https://ithelp.ithome.com.tw/articles/10254853

总结:

这题是非常基础的问题,务必要熟悉。另外这题还可以延伸出 [iVar getter setter] 的问题,这之後还会提起。


<<:  记忆卡随身碟硬碟档案丢失的解决办法

>>:  AutoCAD ActiveX #1 安装环境

前端工程师也能开发全端网页:挑战 30 天用 React 加上 Firebase 打造社群网站|Day25 阻挡会员路由

连续 30 天不中断每天上传一支教学影片,教你如何用 React 加上 Firebase 打造社群...

Day9 云端储存 - SAN

SAN - 网路上的硬碟 我的工作就是开发公司的SAN产品,所以对他比较了解 SAN就是空出一个网...

Day 20 ATT&CK for ICS - Evasion(2)

T0858 Change Operating Mode 如同Day15 ATT&CK for...

Day15 - 请蛇上台

class Snake { constructor() { // 蛇头位子 this.head = ...