2014-06-05 9 views
0

배열에서 이야기하고있는 객체의 유형을 알고있는 경우 블록 열거 형 또는 아니요로 입력하는 것이 더 좋습니까? 대신유형이 알려진 배열 블록 열거 형에 객체를 입력하는 것이 좋습니다?

:

[myClassArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { }]; 

사용이 :

만큼 당신이 배열을 다시 할당하지 않는 한
[myClassArray enumerateObjectsUsingBlock:^(MyClass *obj, NSUInteger idx, BOOL *stop) { }]; 

답변

0

, 당신은 괜찮을 것이다. 확실히 의심스러운 점이 없는지 확인하기 위해 수표를 만드는 것이 더 나은 습관입니다. enumerateObjectsUsingBlockfor(MyClass *obj in myClassArray)과 동일하게 작동하므로 추가 기능을 활용하려면 열거 메서드 만 사용하십시오. for 루프 환경에서 개체를 MyClass로 설명하면 열거 형에서 사용할 수도 있습니다.

1

개인적으로 항상 열거 메서드의 블록 매개 변수에서 개체 유형을 지정합니다. 그리고 키와 값의 유형을 지정하여 NsDictionary와 동일한 방법으로 동일한 작업을 수행합니다.

그러나 컬렉션의 개체 유형이 확실한 경우에만이 작업을 수행합니다.

블록 매개 변수에서 유형을 지정하지 않으면 블록 내에서 다른 유형으로 id obj를 캐스팅해야합니다 (이 경우 불필요합니다).

컬렉션에있는 개체 유형 (거의 항상 가능함)을 확신 할 수없는 경우에도 매개 변수에 지정된 형식을 가진 개체를 선택한 다음 블록 내부에서이를 확인하는 것이 좋습니다. NSAssert (및 릴리스 빌드에서 안전하게 실패 할 경우)가 있습니다.

블록의 오브젝트 유형이 콜렉션의 오브젝트와 동일한 유형이어야하는 방식으로 메소드를 선언하는 기능을 제공하는 다른 언어가 있습니다. Obj-C는 이것을 허용하지 않기 때문에 필자가 기술 한 것과 같은 블록에서 기대하는 것에 대해 항상 명시하는 것이 더 바람직하다고 개인적으로 생각한다.