2016-11-13 8 views
-2

Objective-Cを学び始めたところで、以下のコードを理解しようとしています。 FindLargestNumber.h、FindLargestNumber.m、main.mの3つのファイルがあります。Objective-Cと@Interfaceファイルの配列

FindLargestNumber.hファイルで、誰かが私に@interface NSMutableArray (FindLargestNumber)の意味を説明できるかどうか疑問に思っていました。私は代わりに@interface FindLargestNumber: NSObjectのような何かを見ることを期待していた。

#import <Foundation/Foundation.h> 

@interface NSMutableArray (FindLargestNumber) 

- (id)largest:(NSMutableArray *)array; 

@end 

------------------------------------------------------------ 

#import "FindLargestNumber.h" 

@implementation NSMutableArray (FindLargestNumber) 

- (id)largest:(NSMutableArray *)array { 
    id currentLargest = @0; 
    for (id item in array) { 
     if (item > currentLargest) { 
      currentLargest = item; 
     } 
    } 
    return currentLargest; 
} 

@end 

------------------------------------------------------ 

#import <Foundation/Foundation.h> 
#import "FindLargestNumber.h" 

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 
     NSMutableArray *array = [NSMutableArray arrayWithObjects: @1, @4, @743, @77, @0, nil]; 
     //NSLog(@"%@", array); 
     NSLog(@"The largest value is %@", [array largest:array]); 
    } 
    return 0; 
} 
+0

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html – Kreiri

+0

[OffTopic]実際には、配列内の最大値を見つける最良の方法はKVCです。 NSLog(@ "最大値は%@"、[array valueForKeyPath:@ "@ max.self"]); NSArray *配列= @ [@ 1、@ 4、@ 743、@ 77、 ' – vadian

答えて

0

NSMutableArrayのクラスは、(既に存在する)largest:という名前の新しいメソッドを追加することによって拡張されています。 Objective-Cでは、クラスはカテゴリを使用して拡張され、ここではカテゴリはFindLargestNumberとなります。詳細はhttps://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/Category.htmlを参照してください。

+0

用語が不十分です。クラスはサブクラス化によって拡張され、カテゴリは拡張されません。カテゴリは、サブクラス化せずに既存のクラスに新しいメソッドを追加します。 – rmaddy

+0

私は私の答えで参照したアップルのドキュメントから: "カテゴリは、それが拡張するクラスのインタフェースファイルをインポートする必要があります:"用語は問題ありません。 –

+0

@マークスミス、Thanks Mark! – Piet

関連する問題