2012-07-26 2 views
0

정수를 반환하는 메서드가 있고 이제 작은 구조체 또는 클래스를 반환 할 수도 있습니다. 만약 내가 C + +를 사용하여 구조체에 대한 참조를 매개 변수로 전달합니다. iOS에서 ARC를 사용하는 경우, 이와 동등한 점은 __autoreleasing 속성을 가진 포인터에 대한 포인터를 사용하는 것입니다.메서드에서 2 개의 결과를 반환하는 가장 좋은 방법은

두 값을 포함하는 배열을 반환 할 수 있지만 필요 이상으로 alloc'ing 것이라고 생각하고이 (100,000 호출) 많이 사용할 수 있습니다.

+0

당신은 단지 objc 사용 ++ 및 C++에서와 같이, 참조 구조체를 전달할 수 있습니다. –

답변

3

ARC를 사용하는 경우라도 참조 또는 객체 포인터로 구조체를 전달할 수 있습니다.

C++에서와 마찬가지로 ref를 사용하여 구조체를 전달합니다. 예 : &aStruct

-(int)getStuffOut:(SomeStruct *)aStruct { 
    if(!aStruct) { 
     return 0; 
    } 
    aStruct->myInt = 12345; 
    aStruct->myFloat = 12.345f; 
    return 1; 
} 

또는 :

-(int)getStuffOut:(SomeClass *)anObject { 
    if(!anObject) { 
     return 0; 
    } 
    anObject.myIntProperty = 12345; 
    anObject.myFloatProperty = 12.345f; 
    return 1; 
} 
+0

'aStruct'가 nil인지 확인하십시오! –

+0

@ RichardJ.RossIII 그래, 나는 오류 검사가 이미 모든 사람에게 뿌리깊은 것을 잊는다. =) 수정을 위해 포함하도록 수정되었습니다! – MechEthan

0

ARC를 사용하는 경우 일반 Objective-C를 사용하는 경우 메모리 관리에 대해 걱정할 필요가 없습니다.

사용자 정의 개체를 참조에 의해 전달되는, 그래서 당신은 당신의 방법에 OBJ-C 객체를 통과하고 당신의 물건을 채울 수 있습니다.

아니면 두 값을 유지하는 구조체를 반환 할 수 있습니다

+(struct YourStruct)someMethod:(NSString *)someParam; 

+(YourStruct)someMethod:(NSString)someParam { 

    //some method code 

    YourStruct st; 

    //Do something here with the struct 

    return st; 
} 
+0

반환 값이 정수에 사용되므로이 작업을 수행 할 수 없습니다. 또한 이것이 YourStruct의 새로운 인스턴스를 만들 것이라고 생각하지 않습니까? – Ant

+0

반환 값을 구조체에 추가하면 구조체에 반환 값과 보내려는 추가 데이터가 포함됩니다. – Ecarrion

+0

아니요 별도의 변수가 아닙니다. 구조체는 많은 메소드에서 사용되므로 모든 원래 리턴 유형을 추가해야합니다. 그건 옳지 않아. – Ant

관련 문제