宣言に「*」がありません:
Dream *dr1;
これがコンパイラエラーの原因です。
Objective-Cでは、new()で作成されたC ++インスタンスと同様に、オブジェクトはポインタによってのみ参照されます。
また、Objective-Cオブジェクトの場合、「->」(矢印)と「。」(ドット)の違いは、C++オブジェクト/C構造体の場合と同じではありません。C / C ++では、ドットを使用してスタック変数のメンバーにアクセスします。例:
// Stack
MyClass myObject;
myObject.memeber = 1;
MyStruct info;
info.member = 1;
// Heap
MyClass* pMyObject = new MyClass();
myObject->memeber = 1;
MyStruct* pInfo = (MyStruct*) malloc(sizeof(MyStruct));
pInfo->member = 1;
一方、Objective-Cでは、すべてのオブジェクトがヒープ(ポインターによってのみ参照される)であるため、矢印を使用してメンバーにのみアクセスできます。
一方、ドットは、プロパティのゲッター/セッターを呼び出すという異なる意味を持ち、ivarによってサポートされているかどうかはわかりません。(内部に依存します)