【问题标题】:Boolean variable resets when using @property使用 @property 时布尔变量重置
【发布时间】:2014-04-13 08:05:05
【问题描述】:

一班.M

-(void)method{

    BOOL bVar;

    bVar = [UIScreen isRetinaDisplay]; //Custom Category Used Here

    NSLog(@"%d",bVar); //Value is 1

}

第二类.H

@implementation class_two : SKNode

@property (readonly)BOOL bVar;

@end

二级.M

-(void)method{

    NSLog(@"%d",_bVar); //Value is 0

}

当我运行每个方法时,第一个类将 bVar 设置为 1 并打印结果,但是当在另一个类 class_two 中调用第二个方法时,从属性打印的值为 0。

什么是将bVar 变量重置回0?

【问题讨论】:

    标签: objective-c properties boolean


    【解决方案1】:

    没有任何东西被设置为“回”为 0。您只是在处理两个完全不同的变量。在“第一类”中,您设置了一个名为 bVar 的局部变量(顺便说一句,一旦您退出该方法,就会立即丢弃该值)。在第二类中,您有一个名为bVar 的类属性,它由一个实例变量_bVar 支持。

    因此,您的第二个示例是记录一个您似乎从未设置过的实例变量。如果您希望您的“第一类”示例实际更新“第二类”中的属性,那么您必须提供对“第二类”特定实例的引用,该实例的bVar 属性要更新:

    // ClassOne.m
    
    - (void)updateBVarInObject:(ClassTwo *)obj
    {
        obj.bVar = [UIScreen isRetinaDisplay]; //Custom Category Used Here
    
        NSLog(@"%d", obj.bVar); //Value is 1
    }
    

    我不知道与这两个类关联的对象之间的关系,但希望这能说明这个想法,即如果您希望某个类更新另一个类中的属性,它必须具有对另一个对象的引用.

    【讨论】:

    • 所以基本上我正在创建一个指向classTwo's内存位置的指针,它允许updateBVarInObject:方法更改bVarsclassTwo中的属性值?
    • @Mutch95 如果您的意思是“将指向classTwo 对象的指针传递给称为classOneclassOne 方法@”,是的,没错。
    猜你喜欢
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多