2010-04-16 5 views
1

NSMutableArray가 있습니다. 멤버는 결국 클래스의 배열 인스턴스의 멤버가됩니다. NSMutable의 인스턴스를 함수에 넣고 배열 객체를 반환하고 싶습니다. 이 작업을 수행 할 수 있다면 일부 코드를 읽기 쉽게 만들 수 있습니다. 이것이 가능한가?함수가 객체를 반환 할 수 있습니까? Objective-C 및 NSMutableArray

다음은 내가 알아 내려고하는 것입니다.

//Definition: 
function Objects (float a, float b) { 
    NSMutableArray *array = [[NSMutableArray alloc] init]; 
    [array addObject:[NSNumber numberWithFloat:a]]; 
    [array addObject:[NSNumber numberWithFloat:b]]; 
    //[release array]; ???????? 
    return array; 
} 

//Declaration: 
Math *operator = [[Math alloc] init]; 
    [operator findSum:Objects(20.0,30.0)]; 

받는 사람에게 메시지를 보내기 전에 NSMutableArray를 인스턴스화하면 코드가 컴파일됩니다. 메서드와 함께 배열 인수를 가질 수 있다는 것을 알고 있습니다. 문제는 함수를 사용하고 인수를 함수 호출로 바꾸는 방법입니다. 어떤 도움을 주셔서 감사합니다. 나는 findSum 메소드를 대체 할 제안이 아닌 개념에 관심이있다.

+1

@seaworthy : 이것은 모든 유효한 C 함수 선언이 아니다. C에서 함수를 선언하려면 반환 형식 (이 경우 NSMutableArray *)과 함수 이름, 형식 매개 변수 목록을 제공하면됩니다. 다른 한정어 키워드가 있지만 기본 키워드입니다. C에는 함수를 선언하는 "function"키워드가 없다. 이것도 컴파일해서는 안됩니다. –

+0

실제로 이것은 내 코드의 일부가 아니며 추상 표현입니다. 내가 squeegy 보여준 방법을 알아 내려고하고 Obj - C 형식으로 함수를 정의 할 수 있다는 것을 깨닫지 못했습니다. 도와 줘서 고마워. – nebulus

+0

ARC (자동 참조 계산)를 사용하는 경우 자동 릴리스가 더 이상 가능하지 않습니다. 자동 검색 결과를 표시해야한다는 표시기를 추가해야 할 수 있습니다. 어떻게해야하는지 잘 모르겠습니다. – Leander

답변

6

메소드/함수에서 생성 한 객체를 반환하려면 autorelease를 사용하십시오.

NSMutableArray* Objects(float a, float b) { 
    NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease]; 
        // or: [NSMutableArray array]; 

    [array addObject:[NSNumber numberWithFloat:a]]; 
    [array addObject:[NSNumber numberWithFloat:b]]; 
    return array; 
} 

또는 단순히 :

NSMutableArray* Objects(float a, float b) { 
    return [NSMutableArray arrayWithObjects: 
      [NSNumber numberWithFloat:a], 
      [NSNumber numberWithFloat:b], 
      nil]; 
} 
+0

이것은 유효한 C 함수 선언이 아닙니다. 또한 반환 유형을 지정해야합니다. –

+0

예, 바로 고쳐서 : –

+3

주 :'[NSMutableArray array]'는 [[[NSMutableArray alloc] init] autorelease]'의 줄임말입니다. – mipadi

관련 문제