2014-04-13 100 views
0

CLASS ONE.M

-(void)method{ 

    BOOL bVar; 

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

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

} 

CLASS TWO.H

@implementation class_two : SKNode 

@property (readonly)BOOL bVar; 

@end 

CLASS TWO.M

-(void)method{ 

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

} 

當運行每個方法的第類將bVar設置爲1並打印結果,但是當第二種方法在其他類中調用時class_two t他從物業打印的價值爲0.布爾變量復位@property

什麼是將bVar變量重置爲0?

回答

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 
} 

我不知道與這兩個類關聯的對象之間的關係,但希望這可以說明這個想法,即如果您希望某個類更新另一個類中的某個屬性,則必須具有對該另一個對象的引用。

+0

所以基本上我創建了一個'classTwo's'內存位置的指針,它允許'updateBVarInObject:'方法改變'classTwo'中的'bVars'屬性值? – Mutch95

+0

@ Mutch95如果你的意思是你「將指向'classTwo'對象的指針傳遞給名爲'updateBVarInObject'的'classOne'方法,那麼這是正確的。 – Rob