2014-04-18 1 views
1

Objective-C를 배우고 있는데, 수업 중 하나 인 Employee 클래스와 Employee 클래스가있는 Superclass Person 클래스를 만듭니다. Asset 클래스는 Employee 클래스가 소유하고 있습니다. 클래스, 그 인스턴스 기능을 테스트하기 위해, 나는 다음과 같은 코드Objective-C 객체를 만드는 데 가장 좋은 프로그래밍 방법은 무엇입니까?

int main(int argc, const char *argv[]){ 
@autoreleasepool{ 
    NSMutableArray *employees = [[NSMutableArray alloc] init]; 

    for (int i = 0; i < 10; i++){ 
     Employee *person = [[Employee alloc]init]; 
     [person setWeightInKilos:90 + i]; 
     [person setHeightInMeters:1.8 - i/10.00]; 
     [person setEmployeeID:i]; 

     [employees addObject:person]; 
    } 

    .../*code continues from here, to assign [person] 
      's at random indexes in *employees, instances of the Asset class */ 
    } 
} 

을 썼다 궁금 차례로과 같이, 다른 메소드를 호출 한 방법으로 setting[person]의 장점 또는 단점은 무엇입니까 :

main.m: 
.... 
for (int i = 0; i < 10; i++){ 
      Employee *person = [[Employee alloc]init]; 
      [person setWeightInKilos:90 + i withAHeightOf:1.8 - i/10.00 andId:i]; 
      [employees addObject:person]; 
     } 
.... 

감사합니다.

+1

개체를 만든 즉시 해당 정보를 설정해야하는 경우 이니셜 라이저를 매개 변수로 사용하십시오. –

답변

0

기본적으로 여기에는 옳고 그름이 없습니다. objective-c 구문 및 코딩 규칙을 사용하면 여러 매개 변수가있는 긴 메시지를 가질 수 있습니다.

여기에 몇 가지 옵션이 있습니다

  1. 초기화에 이러한 매개 변수를 설정 (예를 들어,initWithId: height: weight:)
  2. SetProperties를이를 결정하기

을 기능 만들기 그들 각각에 대한

  • 를 개별 기능을 만들기 그들
  • 의 각각의 속성을 작성 먼저 자신에게 물어해야합니다

    1. 이 세 쌍 (높이, 무게, ID)이 논리적으로 함께 속해 있습니까?
    2. 둘 중 하나만 설정하는 것이 맞습니까?
    3. 이 개체에 이러한 값이 누락되어 있다는 의미가 있습니까?
    4. 이러한 매개 변수를 원자 적 조치로 설정해야합니까?
    5. 개체의 불변성이 중요합니까?

    대개의 경우 개체를 변경할 수 없도록 선택합니다. 즉, 개체에 읽기 전용 속성을 만들고 초기화 함수를 통해 설정합니다.

  • 0

    Person 클래스에는 weightInKilos, heightInMetersemployeeID을 비롯한 여러 속성이 있습니다.

    물론 각 속성을 개별적으로 설정할 수 있습니다. 편의상 하나의 호출에서 여러 속성을보다 쉽게 ​​설정할 수 있도록 특수한 "도우미"메서드를 제공 할 수 있습니다. 이것은 완전히 선택 사항입니다. 이러한 추가 방법을 추가할지 여부는 엄격하게 개인 취향과 스타일의 문제입니다.

    이러한 "도우미"방법에 대한 고려 사항 중 하나는 선을 그어야하는 곳입니다. 어떤 프로퍼티가 그러한 메소드의 매개 변수가되어야합니까? 나중에 다른 속성을 추가하면 어떻게됩니까? "도우미"메서드를 업데이트하여 다른 매개 변수를 가져온 다음 해당 메서드를 호출하는 모든 코드를 업데이트합니까?

    대부분의 경우 개별적으로 설정하는 것이 좋습니다. 이러한 "도우미"방법을 만들지 여부를 결정할 때 사용하는 가이드 라인 중 하나는 개체가 특정 속성 집합을 유효하게 설정해야한다는 것입니다. 그런 경우에는 일반적으로 필요한 속성을 매개 변수로 사용하는 특별한 init 메서드를 만듭니다. 그런 다음 모든 옵션 항목을 개별적으로 설정할 수 있습니다.

    0

    Employee 개체를 어떻게 정의했는지 표시하지 않았습니다. weight, heightidentification은 속성으로 유지됩니까? 그렇다면 일반적으로 액세스 메소드가 자동으로 생성되어 루틴을 작성할 필요가 없습니다. 속성에는 그들과 관련된 좋은 편의가 있습니다.

    하나의 방법을 다른 방법보다 더 많이 사용하는 이유는 가장 매력적인 이유는 개인적인 스타일입니다. 고려해야 할 사항 - 사용자의 저장된 무게를 변경하려는 경우 어떻게됩니까? 해당 매개 변수 만 설정하는 방법이 있습니까? 아니면 매개 변수를 모두 설정해야합니까?

    개체에 대해 초기화 할 정보를받는 초기화 프로그램을 사용하는 것이 일반적이지만 - (id)initWithWeight:andHeight:andId:andSomethingElse:andMoreStuff:과 같은 것은 내가 확장 한 것보다 훨씬 못 생깁니다. 이 문제를 해결하려면 NSDictionary 클래스가 유용 할 수 있습니다. 사전에 포함하려는 모든 입력란이 포함되어 있고 방법은 - (id)initUsingDictionary:(NSDictionary *)dictionary;이됩니다. 이것에 대한 좋은 점은 필드를 선택적으로 만들 수 있고 단일 메소드 서명이 필드를 쉽게 처리 할 수 ​​있다는 것입니다.

    관련 문제