【问题标题】:Do variables assigned to properties follow the behavior of that property?分配给属性的变量是否遵循该属性的行为?
【发布时间】:2011-08-28 15:30:53
【问题描述】:

寻找关于“链接”到实例变量时 Objective-C 属性如何工作的一点说明。我的困惑源于如何通过@synthesize 指令将属性设置为等于实例变量,例如...

@synthesize someProp = _someIVar;

现在,如果我的someProp 都像...

@property (retain,readonly) SomeClass* someProp

...这会...

-(id)initWithAutoreleasedInstanceOfSomeClass:(SomeClass*)thingThatIsAutoreleased {
    self = [super init];
    if(self) {
         _someIVar = thingThatIsAutoreleased;
    }
    return self;
}

...导致thingThatIsAutoreleased 被保留?

坦克!

【问题讨论】:

    标签: objective-c properties autorelease


    【解决方案1】:

    因为它是只读的,所以你不会有一个设置器,但你可以通过设置内部成员变量来设置值。如果你设置了内部变量,那么你需要保留它。

    _someIVar = [thingy retain];
    

    请注意,您可以通过 KVC 调用并获取触发的保留

    [self setValue:myValue forKey:@"someProp"];
    

    因此,要回答您最初的问题,不,如果您直接设置 iVar,您将不会获得自动保留/释放。如果您正在操纵 iVar,则必须保留/释放。

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 1970-01-01
      • 2016-09-27
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 2016-12-24
      • 1970-01-01
      相关资源
      最近更新 更多