簡體   English   中英

如何在Objective-C中訪問公共實例變量?

[英]How to access public instance variable in Objective-C?

我有以下情況:

@interface MyClass:NSObject
    @public NSString *str;
@end

@implementation 
-(id)init{ 

}

@end

現在,我想在其他類的MyClass外部訪問str變量,(1)使用MyClass對象(2)而不使用MyClass對象,如何實現呢?

您可以使用以下方式致電:

MyClass *a;
a.str;

沒有對象,就無法調用實例變量。 但是,您可以使用以下聲明來調用靜態方法:

@interface MyClass:NSObject

+ (void)doX;

@end

@implementation 

+ (void)doX {
  // do whatever
}

然后在另一個類中,您只需要調用:

[MyClass doX];

但是,讓公共實例變量不是一個好習慣。 原因是它將允許任何類,方法在您的控制下更改該實例變量。 例如,他們可以將NSString * str設置為nil,然后沒人可以調用任何東西,或者他們可能在調用時忘記進行內存管理。

公共變量的一種更好的做法是使用@property

例如,您的字符串應聲明為:

@property (nonatomic, retain) NSString * str;

然后在執行中:

@implementation MyClass

@synthesize str;

屬性的好處是,編譯器將為您生成gettter和setter方法,而這些setter將為您正確處理內存。

有關此處的屬性的更多信息

igh,我知道這個帖子已經死了,但是我相信以上答案是錯誤的。 好第一位。

請查看下面的鏈接。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocObjectsClasses.html#//apple_ref/doc/uid/TP30001163-CH11-SW1

為了使上述接口正常工作,您需要聲明一個在類外部使用的屬性,因為實例變量在類外部不可見。

好; 您不需要。 像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,因為如果var public是一個字符串,則您不會以任何方式保留該字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM