의 속성은이 같은 뭔가가 필요합니다목표 -C. C 배열
@property (nonatomic, retain) int field[10][10];
을하지만,이 코드가 작동하지 않습니다. 그것을 대체하는 방법?
@property(nonatomic, assign) int** field;
참고 여기 retain
을 사용할 수 없습니다 : 내가 제대로 이해하면
의 속성은이 같은 뭔가가 필요합니다목표 -C. C 배열
@property (nonatomic, retain) int field[10][10];
을하지만,이 코드가 작동하지 않습니다. 그것을 대체하는 방법?
@property(nonatomic, assign) int** field;
참고 여기 retain
을 사용할 수 없습니다 : 내가 제대로 이해하면
구조체에 배열을 래핑하는 경우이 작업을 수행 할 수 있습니다. 구조체는 @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;
쓰기 세터와 게터
- (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;
}
,이 같은 뭔가가 필요 세터와 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()
을 호출 할 수 있습니다.
해야 할 것입니다. 읽기 전용 속성
@interface MyClass
{
int _fields[10][10];
}
@property(readonly,nonatomic) int **fields;
@end
@implementation MyClass
- (int *)fields
{
return _fields;
}
@end
사용 당신이 늘 당신이 배열의 값을 수정할 수 없습니다 것을 의미하지 않는, 변경 될 고정 포인터, 때문이다.
이 게시물 참조 http://stackoverflow.com/questions/476843/create-an-array-of-integers-property-in-objective-c – NightFury
또한 왜 NSArray를 단순히 사용할 수 없습니까? –
1) 조언은 NSArray로 변환하고 변환합니다. 또한 int 타입의 간단한 변수를 NSValue 객체와 같은 것으로 변환해야합니다. 또는 C 배열 대신 NSArray를 사용하기 위해 이전 코드를 모두 다시 작성해야합니다. 2) 매개 변수가있는 객체의 NSArray 대신 int의 여러 C 배열을 사용합니다. 변수가 충분히 간단하고이 배열이 논리 레이어와 비슷하기 때문에 – Gargo