문제

C 스타일 기능을 사용하고 있지만 인스턴스 변수를 볼 수 없다는 것을 알게되었습니다. 그래서 나는 그것들을 객관적인 C 방법으로 변환하는 것이 좋습니다.

NSString* myfunc ( int x )

:

- (NSString *)myfunc:(int)x

그리고

myString = myfunc(x);

becomes

myString = [myString myfunc:x];

??

이것은 불길한 경고로 구성되지만 작동하지 않습니다. 내가 무엇을 오해 했습니까?

도움이 되었습니까?

해결책

전화가 틀린 것 같습니다. 아마 시도 :

NSString *myString = [self myfunc:x];

다른 팁

내가 이해하는 한, 당신은 -myfunc: nsstring 객체에 대한 메시지. 그래서 -myfunc: 방법을 선언해야합니다 NSString 클래스 (또는 범주 NSString).

이것이 당신이하고 싶은 일이라면, 메소드의 결과로 객체 자체를 반환 할 필요가 없습니다. 메소드 구현에서 인스턴스 변수를 수정할 수 있습니다. 메소드 호출 (또는 메시지 전송)은 다음과 같습니다.

[myString myfunc:x];

메시지를 다른 클래스의 객체로 보내고 문자열을 반환하려면 메소드 선언이 정확하지만 클래스 구현에 표시되어야하며 메시지 수신기 (정사각형 브래킷의 왼쪽 항목) 그 수업에 :

@implementation MyClass
-(NSString *)myfunc:(int)x
{
    NSString * returnString;
    ...// do something with x, returnString and instance variables
    return returnString;
}
@end;
...
MyClass * myobj = [[MyClass alloc] init];
NSString * myString = [myobj myfunc:42];

두 번째 대답으로, 나는 최근의 모든 질문을 통해 귀하의 문제를 이해하려고 노력하고 있습니다.

에서 시작, 포인터를 반환하는 C 함수가 NSString 물체:

NSString * myfunc( int x )
{
           ... // Do something with x
   NSString * myString = @"MYDATA";
           ... // Do something with myString
   return myString;        
}

그 다음에, 당신은 그 기능을 UIImage 물체:

image1.image = [UIImage imageNamed:@"image1.png"];

함수를 메소드로 변환하는 것이 좋습니다. 액세스하려면 .image 인스턴스 변수,이 메소드는 클래스에 속해야합니다. image1 대상 (이것이 말하자 AlanImage 수업). 이 같은:

@interface AlanImage : NSObject {
    UIImage image;
}
- (NSString *) myfuncWithParam: (int) x;
@end;

@implementation AlanImage
- (NSString *) myfuncWithParam: (int) x
{
    NSString * myString = @"MYDATA";
    image = [UIImage imageNamed:@"image1.png"];
    return myString;        
}
@end

제삼, 당신은 방법의 수신기가 무엇인지 몰랐습니다. 내 조사는 당신의 것으로 이어지는 경향이 있습니다 image 좋은 후보자로서 물체 :

aNiceString = [image myfunc:aNiceInteger];

마지막으로 (이 질문) 만족스러운 답변을 얻지 못하고, 당신은 이번에는 성공과 함께 세 번째 질문을 떠올 렸습니다.

나는 당신에게 힌트를주기 위해 당신의 프로젝트를보다 완전하게 볼 수 있도록 궁금합니다. 어쨌든, 당신은 객관적인 C와 객체 지향적 개념을 배우고있는 것 같습니다. 축하하고 동기 부여를 유지하십시오!

당신은 무엇을 해결하지 못했습니다 객체 지향 프로그래밍 이다. 와 함께 [theObject method] 특정 인스턴스에 속하는 메소드 만 호출 할 수 있습니다.

트릭에 따라 "일반"대상 C에 올바르게 작동하는지 확신 할 수는 없지만 Apple 구현에서는 다음과 같은 작업을 수행 할 수 있습니다.

@interface SomeClass: NSObject {
  int m_someVariable;
  ...
};

- (NSString *) someMethod;
...
@end 

@implementation SomeClass
...
//pure c function with extra one parameter 
//for accessing to instance variables
static NSString privatePlainCeeMethod(SomeClass *my, int fortyTwo) {
  NSString *str;
  //access to a instance variable as for a usual
  //cee structure field: my->fieldName
  ...
  return [NSString stringWithFormat:@"someVariable:%d, fortyTwo:%d",
    my->m_someVariable, fortyTwo];
};

- (NSString *) someMethod  { 
  ...
  return privatePlainCeeMethod(self,42);
};
...
@end

나는 이러한 트릭을 사용하여 관찰 가능한 개인 간단한 기능에서 큰 OBJC 방법을 나눕니다. 이러한 기능 (a) 클래스 인터페이스를 오염시키지 않으며 (b)는 OBJC 방법보다 더 빨리 호출됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top