我試圖爲我的arrayWithCurrentLadder
屬性做懶惰實例化,以便我的數組至少分配一次並啓動一次。但是,似乎我的setter從來沒有真正被調用過,因爲當我嘗試使用數組中的對象進行任何操作時,什麼都不會發生,因此我決定嘗試和數組中的對象來確定我是否正在獲取實際價值(我把這行代碼放在你看得見的星星),調試器表示(null)
,所以我假設我的setter沒有實際設置。我在我的setter中隨機添加了NSLog
以再次查看,但消息甚至沒有顯示在調試器中。爲什麼我的二傳手無法設置?我怎樣才能讓我的setter設置?
#import "LViewController.h"
@interface LViewController()
@property (nonatomic) BOOL firstLadder;
@property (nonatomic, weak) NSMutableArray *arrayWithCurrentLadder;
@property (weak, nonatomic) IBOutlet UIView *playingView;//connects playingView to LViewController
@end
@implementation LViewController
@synthesize playingView = _playingView;
@synthesize firstLadder = _firstLadder;
@synthesize arrayWithCurrentLadder = _arrayWithCurrentLadder;
-(void)setArrayWithCurrentLadder:(NSMutableArray *)arrayWithCurrentLadder {
if(!_arrayWithCurrentLadder)
_arrayWithCurrentLadder = [NSMutableArray arrayWithCapacity:10];
NSLog(@"kgjfkjg");
_arrayWithCurrentLadder = arrayWithCurrentLadder;
NSLog(@"dkfjdk");
}
- (IBAction)buildLadder:(UIButton *)sender {
if (self.firstLadder) {
*******************************************************************************************
NSLog(@"%@", [[self.arrayWithCurrentLadder lastObject] frame].origin.x);
*******************************************************************************************
if (sender.frame.origin.x == [[self.arrayWithCurrentLadder lastObject] frame].origin.x) {
sender.backgroundColor = [UIColor redColor];
[self.arrayWithCurrentLadder addObject:sender];
}
}
}
- (IBAction)startingLadder:(UIButton *)sender {
if (!self.firstLadder) {
[self.arrayWithCurrentLadder addObject:sender];
}
sender.backgroundColor = [UIColor redColor];
self.firstLadder = YES;
}
@end
這既不解決問題,也不與代碼解決一些其他問題...這通常是一個壞主意,懶初始化的吸氣劑是將與志願或其他任何螺釘預計一個「得到」不改變狀態。 – bbum 2012-07-09 03:30:45
如有必要,可以添加kvo呼叫。 – AdrienBrault 2012-07-09 06:29:53
@bbum:你可以擴展一下嗎?蘋果經常演示如何在getter中使用惰性init - 例如。在Xcode默認模板中的應用程序委託Core Data堆棧中。可以說它在語義上有點誤導,但是OTOH是減少init代碼中語句順序的錯誤傾向性的好方法。 – Cris 2012-07-09 07:25:54