語法上的小問題

weixin_34402408發表於2016-05-22

語法上的小問題

深拷貝(mutableCopy)跟淺拷貝(copy)

首先看一組照片:

alt text

簡單來說:深拷貝就是內容拷貝;淺拷貝就是指標拷貝。

系統物件的copy跟mutableCopy方法

無論是集合類物件,還是非集合類物件,接收到copy跟mutableCopy訊息時,都會有以下準則:

  • copy返回imutable物件;如果返回mutable就會崩潰
  • mutableCopy返回mutable物件
[immutableObject copy] // 淺複製
[immutableObject mutableCopy] //非集合深複製 集合單層深複製
[mutableObject copy] //深複製
[mutableObject mutableCopy] //非集合深複製 集合單層深複製

更多資訊可以參考這裡


Property的修飾符

  1. 預設是strong型別
  2. xib/storyboard連結的物件可以用weak,是因為IBOutlet的view不被釋放,這個連結的物件的引用計數不會為0.
  3. block宣告使用copy
  4. 字串使用copy
  5. 屬性宣告修飾符有:strong, weak, unsafe_unretained, readWrite,預設strong, readWrite的。
  6. 沒有指明是nonatomic的時候,預設時候atomic原子操作,會影響效能。

ARC下重寫 Getter and Setter

  1. 只重寫setter和getter其中之一,可以直接重寫:
@property (nonatomic, strong) NSMutableArray *array;
- (void)setArray:(NSMutableArray *)array {
    if (_array != array) {
        _array = nil;
        
        _array = array;
    }
}


  1. 兩個一起重寫的時候
@property (nonatomic, strong) NSMutableArray *array;
@synthesize array = _array;
- (void)setArray:(NSMutableArray *)array {
    if (_array != array) {
        _array = nil;
        
        _array = array;
    }
}

- (NSMutableArray *)array {
    return _array;
}

or

@interface ViewController : UIViewController{
    NSMutableArray *_array;
}

- (void)setArray:(NSMutableArray *)array {
    if (_array != array) {
        _array = nil;
        
        _array = array;
    }
}

- (NSMutableArray *)array {
    return _array;
}

相關文章