《招聘一个靠谱的iOS》面试题参考答案

说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:《招聘一个靠谱的 iOS》下面是我对这个面试题的解答
本人iOS github:https://github.com/netyouli?tab=repositories 欢迎mark star。

1.[※]@property中有哪些属性关键字?

(nonatomic, atomic , strong , retain , copy , week , assign , setter , getter , readwrite ,readonly)

2.[※]strong 和retain有什么区别 week 和 assign有什么区别?

(strong 和 retina 基本一样在进行setter方法时会release 旧 retina新 strong 是ARC模式下默认属性关键字,week在对象被释放的时候会自动把对象设置为nil而不会成为野指针,assign不会设置成nil导致对象变成野指针)

3.[※]weak属性需要在dealloc中置nil么?

(不需要,看上题答案解析)

4.[※※]@synthesize和@dynamic分别有什么作用?

(@synthesize 在编译的时候会自动加入getter 和 setter方法以及默认私有成员对象在xcode5.0以后@synthesize可以不写,

实例:

@property (strong) NSString * whc;

@synthesize whc;

在编译的时候xcode会自动帮我们生成如下方法:

默认私有对象为:NSString * _whc;

-(void)setWhc:(NSString *)whc{

       [_whc release];

      _whc = [whc retain];

 }

-(NSString *)whc{

      return _whc;

}

@dynamic 在编译时不会自动生成getter 和 setter 方法,而是在运行时动态在 + (BOOL)resolveInstanceMethod:(SEL)aSEL

方法里指定getter 和 setter方法名称并且动态添加。

例如:

定义private 对象NSString * _whc;

@dynamic wHC;
void setWHC(id self, SEL _cmd , NSString whc) {
    // implementation ….
       _whc = whc.copy;
}
NSString * wHC(id self , SEL _cmd){
    return _whc;
}
+ (BOOL)resolveInstanceMethod:(SEL)aSEL
{
    if (aSEL == @selector(setWHC:)) {
          class_addMethod([self class], aSEL, (IMP) setWHC, "v@:@");//v表示返回类型void 后面三个以此表示(@表示self,:表示_cmd,@表示whc)
          return YES;
    }else if(aSEL == @selector(wHC)){
         class_addMethod([self class], aSEL, (IMP) wHC,"@@:");// 后面三个以此表示(@表示返回类型NSString,@表示self,:表示_cmd
         return YES;
    }
)
    return [super resolveInstanceMethod:aSEL];
}
@end
)

5.[※※※]ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些?

(对象类对象属性默认关键字有:nonatomic , strong , readwrite , setter , getter 对于内建类型属性是默认关键字有:nonatomic , assgin , readwrite, setter ,

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值