2013-07-09 6 views
4

의 속성은이 같은 뭔가가 필요합니다목표 -C. C 배열

@property (nonatomic, retain) int field[10][10]; 

을하지만,이 코드가 작동하지 않습니다. 그것을 대체하는 방법?

@property(nonatomic, assign) int** field; 

참고 여기 retain을 사용할 수 없습니다 : 내가 제대로 이해하면

+0

이 게시물 참조 http://stackoverflow.com/questions/476843/create-an-array-of-integers-property-in-objective-c – NightFury

+0

또한 왜 NSArray를 단순히 사용할 수 없습니까? –

+0

1) 조언은 NSArray로 변환하고 변환합니다. 또한 int 타입의 간단한 변수를 NSValue 객체와 같은 것으로 변환해야합니다. 또는 C 배열 대신 NSArray를 사용하기 위해 이전 코드를 모두 다시 작성해야합니다. 2) 매개 변수가있는 객체의 NSArray 대신 int의 여러 C 배열을 사용합니다. 변수가 충분히 간단하고이 배열이 논리 레이어와 비슷하기 때문에 – Gargo

답변

6

구조체에 배열을 래핑하는 경우이 작업을 수행 할 수 있습니다. 구조체는 @property 표기법으로 지원됩니다 (예 : CALayer의 CGRect 경계 참조).

typedef struct { 
    int contents[10][10]; 
} TenByTenMatrix; 

다음, 당신의 클래스 인터페이스에, 당신이 할 수 있습니다 :

먼저 당신의 구조체를 정의

@property (assign) TenByTenMatrix field; 

참고이 경우, 당신은 단지 또는 사용하여 전체 배열을 설정할 얻을 수 재산. 그래서 당신은

self.field.contents[0][0] = 1; 

을 할 수 없습니다 당신은 그것은 꽤 간단하다

TenByTenMatrix temp = self.field; 
temp.contents[0][0] = 1; 
self.field = temp; 
0

쓰기 세터와 게터

- (int) field:(int)i j:(int)j { 
    return field[i][j]; 
} 

- (void)setField:(int)i j:(int)j toValue:(int)value { 
    field[i][j] = value; 
} 
+0

별도의 값이 아닌 전체 배열을 저장하려고합니다. – Gargo

+0

이 작업이 작동하지 않습니다. . Objective-C 속성 설정자는 정확히 하나의 매개 변수를 사용하며 getter는 아무 것도 가져 가지 않습니다. –

+0

@property를 사용할 때와 같이 전체 배열을 설정하고 가져 오는 2 가지 방법을 의미했습니다. 따라서이 답변은 정답의 30-50 %를 선호합니다. – Gargo

3

,이 같은 뭔가가 필요 세터와 getter 메소드 모두 필요 객체에만 사용할 수 있고 (int은 기본 유형이기 때문에)

그런 다음 당신은 다음과 같은 방법으로 이것을 사용할 수 있습니다 : 숙박 시설의 유형 assign이기 때문에, 당신은 메모리 관리를 돌봐해야

//some initialization - just an example, can be done in other way 
self.field = malloc(10 * sizeof(int)); 

for(int i = 0; i < 10; i++) { 
    self.field[i] = malloc(10 * sizeof(int)); 
} 

//actual usage 
self.field[2][7] = 42; 
int someNumber = self.field[2][7]; 

. field 속성에 대한 맞춤 설정기를 만들고 free()을 호출 할 수 있습니다.

0

해야 할 것입니다. 읽기 전용 속성

@interface MyClass 
    { 
     int _fields[10][10]; 
    } 

    @property(readonly,nonatomic) int **fields; 

    @end 

    @implementation MyClass 

    - (int *)fields 
    { 
     return _fields; 
    } 

    @end 

사용 당신이 늘 당신이 배열의 값을 수정할 수 없습니다 것을 의미하지 않는, 변경 될 고정 포인터, 때문이다.