2012-08-08 47 views
2

有可能像下面的反方向嗎?是否可以反轉屬性的方向? (關於objective-c的語法)

[財產通常方向]

@interface MainClass { 
    CustomClass *test1; 
} 
@end 

@implementation MainClass 
    self.test1 = [[CustomClass alloc] init]; 
@end 

[很想知道的財產逆directrion]

是否有可能表明從test1的自我?

ex) like test1.myowner? or test1<-self? or test1/self or etc.. 

回答

1

不,不是真的。你不能從被設置的屬性對象設置屬性。你幾乎可以肯定想要在CustomClass上聲明一個屬性,然後在MainClass的設置器中,將CustomClass實例的屬性設置爲self

+0

思考如何掀起一些Obj-C運行時hackery來巧妙地解決這個問題。會是一個真正的方便。 – 2012-08-08 12:48:24

+0

這通常出現在模型層代碼中。核心數據可以自動管理這些類型的關係,以及其他許多事情。 – bbum 2012-08-08 14:57:56

3

不,屬性是單向的。你將不得不顯式定義一個反轉屬性並賦值給它。

由於兩個對象相互引用,所以還必須注意不要引入保留週期。只有其中一個屬性必須保留/強壯,否則,最終會生成兩個永遠無法釋放的對象。

0

這裏有很多要分開。首先,幾乎所有你聲明的類都應該從NSObject繼承。

@interface MainClass : NSObject { 

你應該使用@property@synthesize創建一個實例變量,不分配像你想做什麼伊娃。

@interface MainClass : NSObject 
@property(nonatomic, retain) CustomClass *test1; 
@end 

@implementation MainClass 
@synthesize test1; 

// only if you're not using ARC 
-(void)dealloc { 
    [test1 release]; 
    [super dealloc]; 
} 

@end 

前)像test1.myowner:如下:這將更好地被寫的?或測試1 <-自己?或TEST1 /自或等。

所有這些都是錯誤的,如果你想從TEST1訪問MainClass的情況下,你必須在該類聲明實例變量,並設置「self」來該實例變量。如果您只有一個實例,則可以將MainClass作爲單例實施。

1

您可以通過手動implementin setter方法例如

- (void)setTest1:(CustomClass *)aCustomClass 
{ 
    test1 = aCustomClass; 
    test1.myowner = self; 
} 

實現這種水煤漿自己會事業必須將myowner屬性添加到CustomClass並使其虛弱或unsafe_unretained避免圓形保留循環。

相關問題