Суть в том, что эта строка:
Foo *myFoo;
Выше не создает экземпляр Foo. Все, что он делает, - объявляет переменную, которая может, если вы создаете и инициализировать такой экземпляр, использоваться для ссылки на него. Чтобы объявить переменные и для создания экземпляра, вам необходимо сделать следующее:
Foo *myFoo = [[Foo alloc] init];
Дополнительно, эта строка:
[myFoo description];
Это вообще ничего не делает. Метод -description возвращает строку, но вы нигде не храните возвращенную строку и ничего не делаете с ней.
Я мог бы продолжить, но я не буду - я советую вам посетить сайт Apple и прочитать их учебник по Learning Objective-C , а также дополнительные статьи, на которые есть ссылки. Это будет гораздо более эффективным способом изучения языка, чем просто придумывание материала и ожидание того, что компилятор его поймет.