i面试题及答案(基础)

2018-03-21  本文已影响22人  qui丶MyLove
  1. @property中有哪些属性关键字?

答:strong weak retain assign copy unsafe_unretained nonatomic atomic readonly readwrite setter getter

扩展
分别作用
@property (nonatomic,assign,setter=myAge:,getter=thisAge) int age;
属性中使用setter 和getter 修改默认set get 方法
 //-(void)setAge:(int)age{}
-(void)myAge:(int)age{}

//-(int)age{}
-(int)thisAge{
    return 1;
} 
@property (nonatomic ,assign) NSString *name;
- (void)setName:(NSString*)name
{
    _name = name;   // name和_name 引用计数为1;
}

@property (nonatomic ,assign) int age;
- (void)setAge:(int) age
{
    _ age = age;   // 直接赋值
}
@property (nonatomic,retain) Person * p;
 - (void)setP:(Person*) p
{
      if(_p!=p){
          [p retain];  // 把传进来的对象引用计数加1
         [_p  release]; // 把_p以前的对象release一次
         _p = p;    // 把p的对象地址给_p  这时p 和_p共同对象的引用为2
      }
}
@property (nonatomic , copy) Person * p;
- (void)setP: (NSString*)p
{
      [_p release];   //把_p以前的对象release一次
      _p = [p copy]; // 把p 的对象拷贝一份给_p  这时_p 的引用计数为1   而p的引用计数不变
}
- (void)setStrongProperty:(NSString *)strongProperty
{
   _strongProperty = strongProperty;//默认赋值是强引用
}
- (void)setWeakProperty:(NSString *)weakProperty
{
  __weak _ weakProperty = weakProperty;
}
  1. weak属性需要在dealloc中置nil么?

  1. @synthesize和@dynamic分别有什么作用?

@dynamic用于声明不自动生成属性的set和get方法,由用户自己添加。

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

  1. 用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?

  1. @synthesize合成实例变量的规则是什么?假如property名为foo,存在一个名为_foo的实例变量,那么还会自动合成新变量么?

  1. 在有了自动合成属性实例变量之后,@synthesize还有哪些使用场景?

  1. objc中向一个nil对象发送消息将会发生什么?

  1. objc中向一个对象发送消息[obj foo]和objc_msgSend()函数之间有什么关系?

  1. 什么时候会报unrecognized selector的异常?

  1. 一个objc对象如何进行内存布局?(考虑有父类的情况)

  1. [※※※※]一个objc对象的isa的指针指向什么?有什么作用?

上一篇下一篇

猜你喜欢

热点阅读