美文网首页
定义Property时的那些属性

定义Property时的那些属性

作者: 西门闲话 | 来源:发表于2016-01-20 11:20 被阅读0次

最近第一次接手了一个iOS的开发项目。通过这次项目对iOS开发中使用的Objective-C的语法有了一些初步认识。

对于软件开发来说定义Property是必不可少的。Objective-C在定义Property的时候就有可以指定属性来修饰Property。

整理了一下常用的大致有以下几个。

  • nonatomic
  • strong
  • weak
  • assign
  • copy

其中常用的组合:

// 通常声明property的似乎,都是这3种组合
@property (nonatomic, strong) NSMutableArray *array;
@property (nonatomic, copy) NSString *iconName;
@property (nonatomic, assign) BOOL shouldRemind;

// 但是在声明storybord的UI控件的Outlet时,也会用这种组合
@property (nonatomic, weak) IBOutlet UITextField *textField;

各种属性的说明是这样的。

属性 说明
nonatomic 非线性安全,与之相对应的是atomic
strong 强引用,与之相对应的是weak
weak 弱引用,与之相对应的是strong
assign 简单赋值
copy 复制赋值

nonatomic很好理解,iOS中和UI相关的通常指定非线程安全就可以了,不过nonatomic虽然很常用,但它不是默认的属性,默认的是atomic。

strong和weak是一对相对的属性,Xcode4还是5引入ARC(自动引用计数)来管理内存后,新添加的一对属性。其中被strong修饰的property指向一个对象后,会触发该对象的ARC自加,同样当着这个property被设成nil后,该对象的ARC会自减;被weak修饰的property指向一个对象时,不会触发该对象的ARC自加,相对的被设成nil后,该对象的ARC也不会自减,同样当该对象的ARC归零后被会系统回收后,weak修饰的property也会自动被设成nil。

最后就是assign和copy其实还有一个retain,关于这组修饰用的属性,涉及到property实现的。

@interface NewClass ()
// 通常我们是向下下面一样定义property
@property (nonatomic, copy) NSString *propertyName
@end

@implementation AllListsViewController {
    NSString *_propertyNewName;
}
// 当然我们也可以这么定义property
@synthesize propertyNewName = _propertyNewName;

// getter
- (NSString *) propertyNewName {
    return _propertyNewName
}

// setter
- (void) setPropertyNewName:(NSString *)propertyNewName {
   // 暂留
}
@end

而这3个修饰用的属性的区别就在setter里面

  • assgin就是指直接复制
- (void) setPropertyNewName:(NSString *)propertyNewName {
   // assign是大概这个样子的。
   _propertyNewName = propertyNewName;
}
  • copy则是先release,然后再用参数的值copy了。
- (void) setPropertyNewName:(NSString *)propertyNewName {
     // copy是大概这个样子的。
     [_propertyNewName release];
     _propertyNewName = [propertyNewName copy];
}
  • retain和copy很像。只不过是用参数值的retain函数
- (void) setPropertyNewName:(NSString *)propertyNewName {
     // copy是大概这个样子的。
     [_propertyNewName release];
     _propertyNewName = [propertyNewName retain];
}

以上就是几个常用的来修饰property的属性,初次之外还有readonly和readwrite这两个,顾名思义这两个属性就是控制property的读写权限的。

相关文章

  • 定义Property时的那些属性

    最近第一次接手了一个iOS的开发项目。通过这次项目对iOS开发中使用的Objective-C的语法有了一些初步认识...

  • 五、属性(Property)的生成

    属性Property的定义 Property定义非常简单,只有名字name和属性attributes。Proper...

  • Realm数据库使用

    注意@property RLMArray *oldcars;定义属性时 这里不是泛型 而是协议!!...

  • iOS子类与父类属性名冲突

    当子类的属性定义和父类的属性定义发生冲突时,会有一个warning提示 Auto property synthes...

  • 对象_原型

    理解对象 对象 定义有属性property和方法function就是对象。解析属性property:描述对象的状态...

  • 属性Property

    property也是一个类,@property成为属性函数,即可以将python定义的方法当做属性访问,可以对属性...

  • iOS-使用strong,copy,assign,weak 修饰

    目录 assignweakstrongcopy 序言 在iOS开发中定义@property属性时,经常用到assi...

  • Python基础(10)——属性

    属性定义 直接在类里定义 构造函数定义 私有属性 私有属性添加getter和setter方法 使用property...

  • 五、 OC底层面试题

    1.属性&成员变量&属性的区别 属性(property):在OC中是通过@property开头定义,且是带下划线成...

  • assign weak copy block

    在iOS开发中定义@property属性时,经常用到assign、weak、retain、strong、copy等...

网友评论

      本文标题:定义Property时的那些属性

      本文链接:https://www.haomeiwen.com/subject/dehlkttx.html