iOS不同类型的对象初始化

时间:2014-05-26 15:37:28

标签: ios objective-c ios7

我试图将RESideMenu集成到我的应用程序中。我试图了解它是如何工作的,以便能够自定义更多。比,我遇到过这种我以前从未见过的初始化。我似乎无法找到任何官方文档或任何关于SO的问题,这更多地解释了它。如果确实如此,请指出正确的方向。

这是我正在谈论的代码

self.tableView = ({
        UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, (self.view.frame.size.height - 54 * 5) / 2.0f, self.view.frame.size.width, 54 * 5) style:UITableViewStylePlain];
        tableView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth;
        tableView.delegate = self;
        tableView.dataSource = self;
        tableView.opaque = NO;
        tableView.backgroundColor = [UIColor clearColor];
        tableView.backgroundView = nil;
        tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        tableView.bounces = NO;
        tableView.scrollsToTop = NO;
        tableView;
    });

那么,它是一种新的语言功能,它允许我们以不同的方式初始化对象。这有点像Object Initializer in C#

如果我已按照以下

进行初始化,那将会有所不同
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, (self.view.frame.size.height - 54 * 5) / 2.0f, self.view.frame.size.width, 54 * 5) style:UITableViewStylePlain];
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
[self.tableView setOpaque:NO];
....
...

最后一个问题,这种初始化是否适用于任何UIKit类或任何Foundation类?

修改 如果我在初始化中注释这最后一行代码tableView;它给我编译错误 ARC不允许将'BOOL'(又名'signed char')隐式转换为'UITableView *' ,为什么会这样?最后一行是什么样的退货声明还是什么?

感谢。

1 个答案:

答案 0 :(得分:1)

如果使用传统代码,只需FTR即可无差异

(就像json说的那样,你现在可以直接简单地说dict [@" someKey"]但是没有根本的区别。)

感谢您指出这一点!!