我正在尝试为我的arrayWithCurrentLadder
属性进行延迟实例化,以便我的数组至少被分配和启动一次。但是,似乎我的setter实际上从未被调用过,因为当我尝试用数组中的对象做事时没有任何反应,所以我决定尝试NSLog
数组中的一个对象来查明我是否得到了一个实际值(我按照那行代码放了星星,你可以看到),调试器说(null)
,所以我假设我的setter实际上并没有设置。我在我的setter中添加了随机NSLog
以再次查看,但消息甚至没有显示在调试器中。为什么我的二传手不会被设定?
#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
答案 0 :(得分:1)
你应该覆盖getter而不是setter:
- (NSMutableArray *)arrayWithCurrentLadder
{
if (nil == _arrayWithCurrentLadder) {
_arrayWithCurrentLadder = [[NSMutableArray arrayWithCapacity:10] retain];
}
return _arrayWithCurrentLadder;
}
答案 1 :(得分:0)
您的setter可能设置得很好,但您的@property
声明表示该对象未被保留。
假设ARC,weak
@property
的声明不符合您的要求;除非你有其他强烈引用该对象的东西,否则ARC运行时很乐意在退出该方法时释放它。
另请注意以下内容毫无意义; if()测试和赋值实际上是无操作(并且在手动保留释放下会出现泄漏)。
if (!foo) foo = [[... alloc] init];
foo = somethingElse;