2012-04-16 94 views
4

我已经通过苹果的“你的第二个iOS应用程序”教程的学习”,我已经注意到,每次我用一个NSDateFormatter生产日期字符串,我预期蒙上输入日期对象。为什么这里需要演员?

如( Page - 。“为了实现configureView法”

BirdSighting *theSighting = self.sighting; 

if (theSighting) { 
    self.birdNameLabel.text = [theSighting name]; 
    self.locationLabel.text = [theSighting location]; 

    self.dateLabel.text = [formatter stringFromDate:(NSDate *)theSighting.date]; // Here 
} 

但是我知道,在BirdSighting类的date属性始终是一个NSDate对象下)

所以我想知道为什么本教程总是强调输入,是否有某种客观 - 约定或框架对话建议您这样做?如果是的话,为什么?

回答

4

这没有必要。演员仅仅是为了清楚起见,作为属性已经被定义为NSDatehere

@property (nonatomic, strong) NSDate *date; 

其中铸造是必要的,这种形式的唯一情况要么与核心基础打交道时处于非圆弧,像这样:

CFDateRef asCFDate; 
NSDate *asNSDate = (NSDate *) asCFDate; 

但是,在ARC中,您将使用__bridge cast来代替。

2

演员阵容是不必要的,应该删除在我看来。

的属性已被定义作为数据模型对象上的NSDate(除非有它重新定义到id或东西,这是令人怀疑的后面的步骤中),所以它是给没有额外的信息提供给代码或读者编译器。

+1

即使它是'id',转换仍然是不必要的,因为所有指向对象“子类”(注意空气引号)的结构体objc_object都可以隐式转换。如果处理一个不透明的结构,比如'CoreFoundation'或'CoreGraphics',那么只需要进行强制转换。 – 2012-04-16 14:59:22

+1

我的意思是代码清晰而不是汇编,但你绝对正确(像往常一样!) – jrturton 2012-04-16 15:43:34