iOS SDK : about using properties when creating objects programmatically?

标签 ios objective-c cocoa class object

下面是创建日期选择器的标准示例

- (void)viewDidLoad {

    CGRect pickerFrame = CGRectMake(0,250,100,100);

    UIDatePicker *myPicker = [[UIDatePicker alloc] initWithFrame:pickerFrame];
    [myPicker addTarget:self action:@selector(pickerChanged:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:myPicker];
    [myPicker release]; 
}

- (void)pickerChanged:(id)sender
{
    NSLog(@"value: %@",[sender date]);
}

这一切都很好。我有点习惯在 IB 中创建元素,因此当我以编程方式创建对象时,我不确定如何访问数据。

我的意思是..我应该将 myPicker 分配给类属性,然后将其作为 _myPicker 访问吗?

或者假设我想访问 pickerChanged 方法内部的日期而不调用其他方法。我应该分配一个 NSDate 属性并在每次选择器更改时重新分配它吗?

当我尝试这样做时遇到了一些内存问题。我有另一种方法获取 _theDate,它可能尝试在 pickerChanged 修改它的同时访问它?

无论如何,我得到的是“以编程方式创建操作表和选择器等内容时正确的工作流程是什么”。当这些事情发生变化时,应该如何保存结果数据以便类的其余部分可以访问它?

额外问题:

这有区别吗?

for(UILabel *myLabel in view.subviews){
    NSLog(myLabel.text);
}

还有这个?如果我知道我的 View 只包含某种类型的对象,我是否需要一直检查该类?

for((id) myLabel in view.subviews){
    if([myLabel isKindOfClass:[UILabel class]){
        UILabel *theLabel = myLabel;
        NSLog(myLabel.text);
    }
}

最佳答案

通常,如果您需要多次访问属性,则只需定义它们即可。您可以在 .m 文件的界面中执行此操作:

@interface MyObject()

@property (weak, nonatomic) UIDatePicker *myPicker;

@end

然后您将能够通过 _myPicker 或 self.myPicker 访问它。

您的类中不需要另一个 NSDate 属性,因为您可以随时访问设置的日期:

_myPicker.date

对于你的最后一个问题:两者中的后者只是额外的健全性检查。当您编写自己的代码时,您应该知道要添加哪些 subview ,仔细检查 subview 的类型不会有什么坏处,以防出现任何问题并且您尝试访问不存在的选择器。但这是一个更大的编程问题,不一定是 Objective-C 或 iOS 特定的。

关于iOS SDK : about using properties when creating objects programmatically?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839161/

相关文章:

cocoa - 当 LSUIElement 设置为 YES 时,如何处理快捷方式?

ios - UIImageView 自动创建的内容大小自动布局约束与尾随/前导约束重叠

ios - xcode 自定义叠加捕获

iOS 后台 App Fetch 不工作

objective-c - 如何在编译时填充 NSArray?

ios - 在 UITableView 上匹配两个具有不同 valuekey 的 JSON ios

ios - UITableView从UISearchBar更新结果

iOS 触摸阻塞问题

cocoa - 在 cocoa 中创建 NSApplication?

Cocoa——让一个简单的 NSImageView 工作