0

在这段代码中,如果collection在调用 的类中释放init...,会发生self.title什么self.managedObjectContext?难道我们不需要调用.itemNamecurrentCollection不是调用collection自身吗?

- (id)initWithCollection:(AACollection *)collection {
    if( (self = [super initWithNibName:@"AACollectionViewController" 
                                bundle:nil]) ) {
        currentCollection = [collection retain];
        self.title = collection.itemName;
        self.managedObjectContext = collection.managedObjectContext;
    }

谢谢

4

2 回答 2

2

self.title 或 self.managedObjectContext 会发生什么?

你在保留collection,所以不会发生任何不好的事情。也就是说,给你的字符串属性copy语义通常是一个好主意。例如,假设title是一个字符串属性,如果collection.itemName碰巧给了你一个可变字符串,你真的想制作一个不可变的副本,这样它就不会在你的眼皮子底下被改变(如果你只是引用可变字符串就可能发生这种情况细绳)。使用copy将为您做到这一点。

难道我们不必在 currentCollection 上调用 .itemName 而不是在集合本身上吗?

不会,currentCollection并且collection会指向同一个对象。保留的是对象,而不是指针。有些人可能会认为使用它currentCollection的风格更好,但无论哪种方式,它实际上都是一样的。

于 2012-04-10T15:31:31.387 回答
1

一旦你做currentCollection = [collection retain];这两个currentCollection并且collection指向同一个对象。.itemName因此,在那一行之后,您使用哪个来访问该属性并不重要。

于 2012-04-10T15:31:38.543 回答