我有以下條件:如何訪問Objective C中的公共實例變量?
@interface MyClass:NSObject
@public NSString *str;
@end
@implementation
-(id)init{
}
@end
現在我想訪問其他類str變量外MyClass的,(1)使用MyClass的對象(2)不使用MyClass的對象,我怎麼能做到這一點?
我有以下條件:如何訪問Objective C中的公共實例變量?
@interface MyClass:NSObject
@public NSString *str;
@end
@implementation
-(id)init{
}
@end
現在我想訪問其他類str變量外MyClass的,(1)使用MyClass的對象(2)不使用MyClass的對象,我怎麼能做到這一點?
可以調用使用此:
MyClass *a;
a.str;
沒有對象,你不能叫一個實例變量。然而
[MyClass doX];
,讓公共實例變量是不是一個好的做法:然後
@interface MyClass:NSObject
+ (void)doX;
@end
@implementation
+ (void)doX {
// do whatever
}
在另一個類,你只需要調用:但是,你可以調用靜態方法本聲明。原因是它會讓任何類,方法在沒有你控制的情況下改變那個實例變量。例如,他們可以將NSString * str設置爲零,然後任何人都不能調用任何東西,或者他們在調用時可能會忘記執行內存管理。
公共變量更好的做法是使用@property
例如,您的字符串應該聲明如下:
@property (nonatomic, retain) NSString * str;
,然後在執行:
@implementation MyClass
@synthesize str;
好事關於屬性是編譯器會爲你生成gettter和setter方法,這些設置器會爲你正確處理內存。
嘆了口氣,我知道這個帖子是死多頭,但我相信以上回答不正確。 以及第一位。
對於上述接口工作,你需要聲明中使用的屬性及其 類之外,因爲實例變量是不是它的類外可見。
好;你不需要。做類似MyClass-> str的是有效的。
請看這個例子
@interface Foo : NSObject {
@public NSInteger publicMember;
@private NSInteger aproperty;
}
@property (assign) NSInteger aproperty;`
然後調用類
Foo *f = [Foo new];
f.aproperty = 90;
//f.publicMember = 100; property 'publicMember' not found of type Foo *
f->publicMember = 100;
但正如上面的帖子說,你應該總是使用@properties因爲如果公共變種是一個字符串,你是不是以任何方式保留字符串。