2

是否有可能像跟随相反的方向?

[通常的财产方向]

@interface MainClass {
  CustomClass *test1;
 }
 @end

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

[想知道属性的反方向]

是否可以从 test1 指示到 self?

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

4 回答 4

3

不,属性是单向的。您必须明确定义一个逆属性并分配给它。

由于两个对象相互引用,您还必须小心不要引入保留循环。只有一个属性必须保留/强,否则,您最终会得到两个永远无法释放的对象。

于 2012-08-08T12:47:26.133 回答
1

您可以通过手动实现 setter 方法来自己实现这种行为,例如

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

您将不得不将 myowner 属性添加到 CustomClass 并使其成为 weak 或 unsafe_unretained 以避免循环保留循环。

于 2012-08-08T12:51:39.483 回答
1

不,不是。您无法将设置的对象与设置属性的对象相关联。您几乎肯定还想在 上声明一个属性CustomClass,然后在 的设置器中MainClass,将 的实例的属性设置CustomClassself

于 2012-08-08T12:46:44.403 回答
0

这里有很多东西可以挑选。首先,几乎所有你声明的类都应该继承自NSObject.

@interface MainClass : NSObject {

您应该使用@propertyand@synthesize创建一个实例变量,不要像您尝试做的那样分配 iVar。最好这样写:

 @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?还是 test1<-self?或 test1/self 等。

所有这些都是错误的,如果您想从 test1 访问 MainClass 的实例,您必须在该类上声明一个实例变量并将“ self”设置为该实例变量。MainClass如果您只拥有一个实例,那么将其实现为单例可能是一个更好的主意。

于 2012-08-08T12:47:47.840 回答