2013-10-17 3 views
-1

신참을 개인 var에 액세스목적 C는 - ... 목표 C 공공 함수에서

참고 : 나는 번역하기 위해 노력하고있어 이것은 개념적인 문제 "공공 및 민간"나는 다른 언어에 대한 지식에서 .

"public"메서드를 통해 "stringB"ivar에 액세스하려면 어떻게해야합니까?

에서 MyClass.h은 "+"접두어 클래스있어서, 비공개 수단

#import "myClass.h" 

@interface myClass() { 

} 
@end 

@implementation myClass 

// My "private" function 
- (void)dealWithStringA 
{ 
    return _stringA; 
} 

// My "public" function 
+ (void)dealWithStringB 
{ 
    // Errors with: Instance variable "stringB" accessed in class method 
    return _stringB; 
} 
+0

감사합니다. Grzegorz, 내 생각을 정리했습니다 ....그냥 다른 언어에서 내가 아는 것을 기반으로 그립을 얻으려고. – bob

답변

1

"+", "-"- 개인/공개가 아닙니다. 당신이 공개됩니다 .H 파일에 선언

@interface YourClass() 
- (id) privateMethod; 
@end 

모든 :

@interface YourClass : NSObject 
- (id)someMethod //public 
@end 

"+"에 사용되는

은 당신이하는 .m 파일에 그를 구현해야 개인 기능을하게하려면 정적 함수를 사용하여 클래스 인스턴스가 없어도 호출 할 수 있습니다. 귀하의 경우 예를 들어 :
[myClass dealWithStringB]; 

및 대한

"-"기능을 사용하면 인스턴스를해야합니다.

[[[myClass alloc] init] dealWithStringA]; 

정적 함수는 클래스의 속성이 필요하지 않거나 클래스의 인스턴스를 만드는 데 자주 사용되는 경우에 사용할 수 있습니다. (당신과 유사)

1

@interface myClass : UIViewController { 

} 

@property (nonatomic, retain) NSString *stringA; 
@property (nonatomic, retain) NSString *stringB; 

- (void)dealWithStringA; 
+ (void)dealWithStringB; 

myClass.m. "-"는 인스턴스 메소드를 나타내며 개인용은 아닙니다.

공개 및 개인 메서드는 모두 클래스 또는 인스턴스의 개인 상태에 액세스 할 수 있습니다.

2

+으로 시작하는 메소드는 -으로 시작하는 메소드가 인스턴스 메소드 인 목적 C에서 클래스 메소드라고합니다. 인스턴스 메소드는 해당 클래스의 인스턴스에서만 수행 할 수 있습니다.

또한 해당 메서드에서 문자열 개체를 가져올 것으로 예상되므로 메서드의 반환 형식은 NSString입니다.

클래스 메서드의 경우 해당 클래스의 자동 렌더링 인스턴스를 만든 다음 해당 인스턴스에서 작업을 수행해야합니다.

예 :

+ (NSString*)dealWithStringB 
{ 
    MyClass *myClass = [[[MyClass alloc] init] autorelease]; 
    myClass.stringB = @"Its String B";//It's an absurd example 
    return myClass.stringB; 
} 
0

에서 MyClass.h

@interface myClass : UIViewController 
    { 

    } 

@property (nonatomic, retain) NSString *stringA; 
@property (nonatomic, retain) NSString *stringB; 

- (void)dealWithStringA; 
+ (void)dealWithStringB; 

@end 

myClass.m

@implementation myClass 
@synthesize stringA ; 
@synthesize stringB ; 

static myClass* instance = nil; 
+(void) dealWithStringB 
    { 
     if(instance==nil) 
     { 
      instance=[myClass alloc]init]; 
     } 

     else 
     { 
      //Access the field this way 
        printf("@"The string content is %@",instance.stringB); 
     } 

    } 

가 지우기를 희망!