IOS面试题object-c 21-30

21、简述IOS static 关键字的作用?

函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,


因此其值在下次调用时仍维持上次的值;
2.在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;


3.在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明 它的模块内;


4.在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;


5.在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。

22、@property 后面可以有哪些修饰符?

@property后面总的有如下修饰符:


readWrite,readOnly,assign,copy,retain;


readWrite:系统会自动帮我们生成getter和setter方法;


readOnly: 系统只会帮我们生成getter方法;


assign:表示直接赋值,适用于基本数据类型:NSInteger和CGFolat


copy:使用于NSString,与NSString一起用表示浅拷贝,与NSMutableString表示深拷贝。


retain:使用于除了assign和copy之外的NSObject的子类,例如NSArray,UIView,NSDictionary等


控件用weak修饰,delegateassign和weak修饰

23、解释Object-C什么情况使用 weak 关键字,相比 assign 有什么不同?

ARC中,出现循环引用的时候,必须要有一端使用weak,比如:自定义View的代理属性


已经自身已经对它进行一次强应用,没有必要在强引用一次,此时也会使用weak,自定义View的子控件属性一般也使用weak; 但b是也可以使用strong


weak当对象销毁的时候,指针会被自动设置为nil,而assign不会* assigin 可以用非OC对象,而weak必须用于OC对象

 24、 如何Object-C让自己的类用 copy 修饰符?

想让自己所写的对象具有拷贝功能,则需实现 NSCopying 协议。

如果自定义的对象分为可变版本与不可变版本,那么就要同时实现 NSCopying 与 NSMutableCopying 协议


实现 NSCopying 协议。该协议只有一个方法:- (id)copyWithZone:(NSZone *)zone;。


实现 NSMutableCopying 协议。该协议只有一个方法:- (id)mutableCopyWithZone:(nullable NSZone *)zone;

25、简述如何重写带 copy 关键字的 setter?
重写copysetter方法时候,一定要调用一下传入的对象的copy方法,然后在赋值给该setter的方法对应的成员变量
26、 @protocol 和 category 中如何使用 @property?

protocol中使用property只会生成setter和getter方法声明,我们使用属性的目的,是希望遵守我协议的对象的实现该属性


category 使用 @property 也是只会生成setter和getter方法的声明,如果我们真的需要给category增加属性的实现,需要借助于运行时的两个函数


objc_setAssociatedObject
objc_getAssociatedObject

 27、Weak属性需要在dealloc中置nil么?
不需要,在ARC环境无论是强指针还是弱指针都无需在deallco设置为nil, ARC会自动帮我们处理
28、 自动合成属性实例变量后,@synthesize还有哪些使用场景?​
@synthesize主要就是用来生成setter,getter方法的实现,在@property被增强之后,其实已经很少使用@synthesize了,你知道@synthesize的其他使用场景吗? 能给我介绍一下吗?
如果你听懂了,感觉面试官说的很有道理,可以说点赞美的话.
29、 Object-C中向nil对象发送消息将会发生什么?​

在Objective-C中向nil发送消息是完全有效的——只是在运行时不会有任何作用:


如果一个方法返回值是一个对象,那么发送给nil的消息将返回0(nil)。例如:Person * motherInlaw = [ aPerson spouse] mother];

如果spouse对象为nil,那么发送给nil的消息mother也将返回nil。


如果方法返回值为指针类型,其指针大小为小于或者等于sizeof(void*),float,double,long double 或者long long的整型标量,发送给nil的消息将返回0。


如果方法返回值为结构体, 发送给nil的消息将返回0。结构体中各个字段的值将都是0。


如果方法的返回值不是上述提到的几种情况,那么发送给nil的消息的返回值将是未定义的。

30、Objec-C 向对象发送消息[obj foo]和objc_msgSend()函数之间有什么关系?

该方法编译之后就是objc_msgSend()函数调用.如果我没有记错的大概是这样的.


((void ()(id, SEL))(void )objc_msgSend)((id)obj, sel_registerName("foo"));

相关推荐

  1. IOS面试object-c 21-30

    2024-03-12 23:38:04       22 阅读
  2. IOS面试object-c 11-20

    2024-03-12 23:38:04       18 阅读
  3. IOS面试object-c 31-40

    2024-03-12 23:38:04       20 阅读
  4. IOS面试object-c 51-60

    2024-03-12 23:38:04       21 阅读
  5. IOS面试object-c 41-50

    2024-03-12 23:38:04       23 阅读
  6. IOS面试object-c 1-10

    2024-03-12 23:38:04       21 阅读
  7. IOS面试object-c 71-80

    2024-03-12 23:38:04       18 阅读
  8. IOS面试object-c 61-70

    2024-03-12 23:38:04       19 阅读
  9. IOS面试object-c 101-110

    2024-03-12 23:38:04       15 阅读
  10. IOS面试object-c 91-100

    2024-03-12 23:38:04       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-12 23:38:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-12 23:38:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-12 23:38:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-12 23:38:04       18 阅读

热门阅读

  1. R语言中ggplot2图例位置、颜色、背景、标题

    2024-03-12 23:38:04       22 阅读
  2. [Python]`threading.local`创建线程本地数据

    2024-03-12 23:38:04       20 阅读
  3. 前端点击切换样式/切换主题

    2024-03-12 23:38:04       19 阅读
  4. 排列数字(DFS)

    2024-03-12 23:38:04       19 阅读
  5. 大数据入门之hadoop学习

    2024-03-12 23:38:04       22 阅读
  6. Spring神器:Environment环境配置

    2024-03-12 23:38:04       21 阅读
  7. LLM(大语言模型)常用评测指标之F1-Score

    2024-03-12 23:38:04       15 阅读
  8. 蓝桥杯:跑步锻炼

    2024-03-12 23:38:04       22 阅读
  9. Python基础学习(11)常用模块

    2024-03-12 23:38:04       20 阅读
  10. Spring事务管理

    2024-03-12 23:38:04       21 阅读
  11. ARM/Linux嵌入式面经(四):浙江大华

    2024-03-12 23:38:04       22 阅读