0

課題 1b のスタンフォード iPhone クラスのセクション 4 で問題が発生しています。

配列を構築する方法と、割り当てが期待するものを理解するのに苦労しています。

配列は「グローバル」変数であるべきですか? それをどこで定義すればよいですか?他の各サブ関数は、変数を配列に追加しますか? PrintIntrospectionInfo 関数は、すべてのイントロスペクティブ情報を列挙して出力するためのものですか?

この課題で彼らが求めていることはどこで確認できますか? 何を読むべきですか?

クラスを受講していないので、誰かコードを送ってもらえますか? レッスンはお互いに積み重なっており、私は先に進むことができるようになりたい.

割り当ては次のとおりです。

Objective-C には、その動的なオブジェクト指向機能に追加する多くの機能があります。これらの機能の多くは、実行時のオブジェクトの機能の決定と使用を扱います。可変配列を作成し、さまざまなタイプのオブジェクトをそれに追加します。NSString、NSURL、NSProcessInfo、NSDictionary など、この割り当ての他の場所で使用したクラスのインスタンスを作成して、配列に入力します。いくつかの NSMutableString インスタンスを作成し、それらも配列に入れます。
他の種類のオブジェクトも自由に作成してください。
配列内のオブジェクトを繰り返し処理し、次のことを行います。 1. オブジェクトのクラス名を出力します。2. オブジェクトがクラス NSString のメンバーである場合はログに記録します。3. オブジェクトがクラス NSString の種類であるかどうかをログに記録します。4. オブジェクトがセレクター「lowercaseString」に応答するかどうかをログに記録します。5. オブジェクトが lowercaseString セレクターに応答する場合、そのセレクターを実行するようにオブジェクトに要求した結果をログに記録します (performSelector: を使用)。

4

3 に答える 3

2

答えは、Xcodeに付属のcocoaおよびobjective-cのマニュアルに記載されています。

#import <Foundation/Foundation.h>

void printIntrospectionInfo()
{
    NSMutableArray * array = [NSMutableArray arrayWithCapacity:5];
    [array addObject: [NSString stringWithString:@"Example NSString object"]];
    [array addObject: [NSMutableString stringWithString:@"Example NSMutableString object"]];
    [array addObject: [NSURL URLWithString:@"http://apple.com.au"]];
    [array addObject: [NSProcessInfo processInfo]];
    [array addObject: [NSDictionary dictionaryWithObject: @"DictObject" forKey: @"KeyObject"]];
    [array addObject: [NSNumber numberWithInt:123456]];

    SEL sel_lowercase = @selector(lowercaseString);

    int i;
    for (i = 0; i < [array count]; ++i)
    {
        id o = [array objectAtIndex:i];

        NSLog(@"%@", o);
        NSLog(@"Class name: %@", [[o class] className]);
        NSLog(@"Is Member of NSString: %@", ([o isMemberOfClass: [NSString class]] ? @"YES" : @"NO"));
        NSLog(@"Is Kind of NSString: %@", ([o isKindOfClass: [NSString class]] ? @"YES" : @"NO"));
        NSLog(@"Responds to lowercaseString: %@", ([o respondsToSelector: sel_lowercase] ? @"YES" : @"NO"));

        if ([o respondsToSelector: sel_lowercase])
            NSLog(@"lowercaseString: %@", [o performSelector: sel_lowercase]);

        NSLog(@"===================");
    }

}


int main(int argc, const char* argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    printIntrospectionInfo();
    [pool release];
    return 0;
}
于 2009-10-05T05:36:42.607 に答える
1

この課題で彼らが求めていることはどこで確認できますか? 何を読むべきですか?

ローカル対グローバルの問題 (ローカルの方が優れている) は別として、NSObjectのドキュメントを読んでください。4 つの質問はすべて、NSObjects によって実装されたメソッドで行うことに関するものです。

Objective-Cについても読むことを忘れないでください。

于 2009-10-05T07:43:13.990 に答える
1

最初の割り当ては、Objective-C を使って感じるというよりも、デザインに関するものではありませんでした。グローバル変数は問題ありませんが、ローカル変数の方がはるかに簡単です。

于 2009-09-19T02:20:01.500 に答える