2013-05-16 2 views
1

자, 내가, 속성으로 배열과 같은 것을의 Obj-C 클래스가 있다고 가정 해 봅시다 :Obj-C : 속성을 인스턴스 변수에 위임 하시겠습니까?

@interface Collection 
@property (strong, nonatomic) NSArray *items; 
@end 

따라서는, 이제 내가 NSArrayitems를 가지고있는 동안, 내가 정의하는 것이 가정하자를 pushpop 메서드 등 임시 변경 가능한 배열을 사용하고 항목 불변의 배열을 바꿉니다 그래서 본질적으로 내 items 속성은 변경 가능한 배열처럼 작동합니다. 자, 인스턴스의 항목 수를 얻고 싶다고 가정 해 봅시다. 내가하는 방법과 같이 할 수 있습니다 알고 : 그러나

- (NSUInteger)getCount 
{ 
    return self.items.count; 
} 

하는 count 속성을 만들 수있는 나를 위해 어떤 방법이 그 대신 items 재산에 위임한다?

나는 대부분의 방법으로 배열처럼 행동 컬렉션 클래스에 관심이 있어요, 그래서 카운트가 같은 인스턴스에 속성으로 액세스 할 수 있도록 내가 사랑하는 것입니다 가능한 경우 :

collection.count 

... 대신 ...

[collection getCount] 

...하지만 어떻게 할 수 있는지 생각할 수 없습니다.

만약 이것이 가능하지 않다면, "정상적인 Obj-C 방식"이 이렇게 할 수 있을까요?

답변

3

objective-c의 점 표기법은 @property 구문으로 선언 된 속성으로 제한되지 않습니다. - (NSUInteger)count; 메서드를 선언 한 경우 collection.count으로 호출 할 수 있습니다. 그러나 이렇게하면 다른 개발자를 혼동시킬 수 있습니다.

@property(readonly) NSUInteger count; 

- (NSUInteger) count { 
    ... 
} 

http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW13

는 다른 방법으로 당신은 또한 (속성 선언에 사용하는 예 @property(readonly, getter=getCount)를 getter 메소드를 지정할 수 있습니다 볼 수 있지만 거기 : 대신 @property 선언을 모두 포함하고 원하는 동작을 정의하는 사용자 정의 게터를 구현 이 경우에는 그렇게 할 필요가 없습니다.

+0

이것은 매우 도움이됩니다. 감사합니다! – Andrew

관련 문제