문제
마지막으로 저를 고민했던 질문입니다.저는 주로 iPhone 및 Mac 용 Objective-C를 다루는 .net 개발자입니다.
object-c의 메소드간에 "데이터 세트"를 전송하는 방법은 무엇입니까?예를 들어 C #에서는 사용자 지정 클래스를 데이터로 채우고 List of type custom class로 전달할 수 있습니다.예를 들어 고객 클래스가 있다면 다음과 같이하면됩니다. 라코 디스
이 작업이 obj-c에서 어떻게 수행되는지 볼 수있는 유일한 방법은 NSArray를 사용자 지정 개체로 채우는 것입니까?이것이 일을하는 효율적인 방법입니까?다른 권장 사항이 있습니까?반환하려는 데이터베이스 / 데이터로 sqlite를 사용하고 있습니다.
해결책
올바른 길을 가고 있습니다.
Cocoa의 컬렉션 클래스 (모두 변경 가능하고 변경 불가능한 변형 포함)는 다음과 같습니다.
- NSArray : 정렬 됨, 개체를 여러 번 포함 할 수 있음
- NSDictionary : 정렬되지 않음, 키에서 값으로 매핑, 키가 복사 됨
- NSSet : 정렬되지 않음, 개체를 한 번만 포함 할 수 있음
- NSCountedSet : 정렬되지 않음, 개체를 여러 번 포함 할 수 있음
불변 변형은 효율성에 많은 도움이됩니다. 변경 가능한 변형이있는 클래스의 접근 자에 대한 표준 패턴은 유지하는 것이 아니라 복사하는 것입니다. 이것은 속성의
@property
속성을 사용하여copy
메커니즘에 코드화되어 있습니다. 라코 디스이것은 배열을 취하는 무언가에 가변 배열을 전달하면 복사되고 다른 것에 전달하면 다시 복사된다는 것을 의미합니다. 트릭은 변경 불가능한 객체를 "복사"하면 실제로는 그대로 유지되므로 첫 번째 사본에 대해서만 히트를칩니다. 어쨌든 변경 가능한 배열을 다른 것에 전달하지 않도록 처음 복사를 원 한 다음 전달한 항목의 뒤에서 변경합니다.
Mac OS X 용 Cocoa의 경우 Core Data도 살펴 보시기 바랍니다. .NET / ADO / etc에서 사용할 수있는 "데이터 세트"패턴의 대안입니다. Core Data를 사용하면 "모든 고객을 확보"한 다음 해당 컬렉션을 전달하지 않습니다. 대신 관심있는 고객을 쿼리하고 쿼리 한 개체의 관계를 탐색 할 때 다른 개체가 자동으로 가져옵니다.
Core Data는 또한 엔티티의 시각적 모델링, 속성 getter 및 setter의 자동 생성, 한 스키마 버전에서 다른 스키마 버전으로의 마이그레이션에 대한 세분화 된 제어 등과 같은 기능을 제공합니다.