2012-11-29 24 views
1

我正在創建一個屬於一個塊的屬性。一個班上的塊獲取?

它被定義如下

@property (nonatomic, strong) void (^ myBlock)(); 

我想這樣做懶人創造,財產,所以我想創建該塊時,該屬性使用一些代碼來運行一個getter。

如果財產是不是塊,是例如一個的NSArray,我會做這樣的setter:

@synthesize myProperty = _myProperty; 

- (NSArray *)myProperty { 

    if (_myProperty) { 
     _myProperty = [[NSArray alloc] init]; 
    } 

    return _myProperty; 
} 

如何爲屬性做的吸氣劑(延遲實例),這是一個塊?

注意:此塊位於單身內。

感謝

+0

你的NSArray示例不是一個setter –

+0

它不是?爲什麼? – SpaceDog

+0

因爲它是一個吸氣劑 –

回答

2
@property (nonatomic, copy) void (^ myBlock)(); 

- (void (^)())myBlock { 
    if (!_myBlock) { 
     self.myBlock = ^() { 
      NSLog(@"Do something"); 
     }; 
    } 
    return _myBlock; 
} 
+0

ahhhh ...爲什麼複製和不強? – SpaceDog

+0

Block只有兩個函數 Block_copy(); Block_release(); Сopy說明符只是使代碼更容易理解 –

+0

塊總是在內部複製 –

1

在H

typedef BOOL (^MyProcessorBlock)(id param1); 

@property (nonatomic, copy) MyProcessorBlock myBlockProperty 

在米(如果使用舊objc前2.0,預2012年夏天)

@synthesize myBlockProperty = _myBlockProperty; 
在M檔

任何情況下

- (MyBlock)myBlockProperty { 
    if(!_myBlockProperty) { 
     _myBlockProperty = ^(self) { ..... }; 
    } 
    return _myBlockProperty; 
} 
+0

「如果你使用舊的objc」哪一個舊的objc?你似乎正在利用ARC,這不是那麼古老 – newacct

+0

new = summer 2012 - 在那裏你不需要再綜合:) [也帶來了文字的改變]編輯代碼 –