stanford cs193p - PrintIntrospectionInfo - раздел 4 задание 1b

У меня проблемы с разделом 4 стэнфордского урока iphone по заданию 1b.

Мне сложно понять, как я буду строить массив и чего ожидает задание.

Должен ли массив быть «глобальной» переменной? Где я должен это определить? Будет ли каждая из других подфункций добавлять свои переменные в массив? Есть ли функция PrintIntrospectionInfo только для перечисления и печати всей интроспективной информации?

Где я могу прочитать о том, о чем они просят в этом задании? Что я должен прочитать?

Я не хожу на занятия, может ли кто-нибудь прислать мне свой код? Уроки дополняют друг друга, и я хочу продолжить.

Вот задание:

Objective-C имеет ряд средств, которые добавляют к его динамическим объектно-ориентированным возможностям. Многие из этих средств имеют дело с определением и использованием возможностей объекта во время выполнения. Создайте изменяемый массив и добавьте в него объекты разных типов. Создайте экземпляры классов, которые мы использовали в другом месте в этом задании для заполнения массива: NSString, NSURL, NSProcessInfo, NSDictionary и т. Д. Создайте несколько экземпляров NSMutableString и также поместите их в массив.
Не стесняйтесь создавать другие типы объектов также.
Просмотрите объекты в массиве и выполните следующие действия: 1. Выведите имя класса объекта. 2. Зарегистрируйте, является ли объект членом класса NSString. 3. Зарегистрируйте, если объект относится к классу NSString. 4. Зарегистрируйте, если объект отвечает на селектор «lowercaseString». Страница 5 из 6 5. Если объект действительно отвечает на селектор lowercaseString, зарегистрируйте результат запроса объекта на выполнение этого селектора (с помощью performSelector :) CS193P Назначение 1B Spring 2009 Doll / Cannistraro


person Neo42    schedule 19.09.2009    source источник


Ответы (3)


Вы можете найти свои ответы в руководствах по cocoa и objective-c, которые поставляются с Xcode.

#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;
}
person stefanB    schedule 05.10.2009
comment
Хороший пример. Вероятно, вы захотите заменить [o RespondsToSelector: @selector (lowercaseString)] на [o responseToSelector: нижний регистр] - person mahboudz; 05.10.2009
comment
Спасибо! Вижу, вы по-разному истолковали задание. Но это здорово. Это демонстрация именно того, что они хотят, чтобы вы выучили. - person Neo42; 05.10.2009

Первое задание было связано не столько с дизайном, сколько с ощущением Objective-C. Глобальная переменная - это нормально, но локальная переменная было бы намного проще.

person Malaxeur    schedule 19.09.2009
comment
В этом случае, как мне создать глобальную переменную? Это всего лишь файл .m. Кроме того, какие PDF-файлы (и страницы) мне следует прочитать? Или онлайн-документ? - person Neo42; 20.09.2009
comment
Это очень похоже на C, если вы с ним знакомы. Вы можете сделать что-нибудь простое, например: NSArray * array; (или NSMutableArray, если необходимо) - person Malaxeur; 20.09.2009
comment
Где? Вне основной функции? - person Neo42; 24.09.2009
comment
Вы можете разместить его там, если хотите, но на самом деле где угодно. - person Malaxeur; 24.09.2009
comment
За пределами любой функции будет файловая область - глобальная. Внутри функции будет локальный. - person Peter Hosey; 05.10.2009

Где я могу прочитать о том, о чем они просят в этом задании? Что я должен прочитать?

Помимо проблемы локального и глобального (местные жители лучше), прочтите NSObject docs. Все четыре вопроса относятся к тому, что вы будете делать с помощью методов, реализованных NSObjects.

Не забудьте также ознакомиться с Objective-C.

person Peter Hosey    schedule 05.10.2009
comment
Этот документ NSObject выглядит полезным. - person Neo42; 05.10.2009
comment
Все ссылки на классы фреймворка - это файлы. Стоит загрузить документы, а затем добавить в закладки свои локальные копии ссылок на фреймворк Foundation и AppKit (Mac) / UIKit (iPhone) для быстрого доступа из браузера. - person Peter Hosey; 06.10.2009