objective-c合成导致错误?

objective-c合成导致错误?,objective-c,ios,gnustep,Objective C,Ios,Gnustep,我对objective-c非常陌生,我自己也尝试了一些例子。这是我的示例代码 #import <objc/objc.h> #import <Foundation/Foundation.h> @interface Test:NSObject { int noOfWheels; int total; } @property int noOfWheels; @property int total; -(void) print; @end @im

我对objective-c非常陌生,我自己也尝试了一些例子。这是我的示例代码

#import <objc/objc.h>
#import <Foundation/Foundation.h>


@interface Test:NSObject
{
  int noOfWheels;
  int total;
}

   @property int noOfWheels;
   @property int total;
   -(void) print;
@end

@implementation Test
@synthesize  noOfWheels, total;
-(void) print
{
  NSLog (@" noofWheels is %i, total %i ", noOfWheels, total);
}

@end

int main ( int argc, char ** argv)
{
  Test *t = [Test alloc];
  t = [t init];
  [t setnoOfWheels: 10];
  [t settotal: 300];
  [t print];
}

我在代码中做错了什么?

默认情况下,在setter方法名称中,iVar的第一个字母大写。因此,正确的选择是:

[t setNoOfWheels: 10];

默认情况下,在setter方法名称中,iVar的第一个字母大写。因此,正确的选择是:

[t setNoOfWheels: 10];
应该是

[t setNoOfWheels: 10];
或者更好,因为您正在声明一个属性:

t.noOfWheels = 10;
应该是

[t setNoOfWheels: 10];
或者更好,因为您正在声明一个属性:

t.noOfWheels = 10;

t.noOfWheels
实际上更糟。圆点符号是一种在出生时就应该被扼杀的令人憎恶的符号。除此之外,回答很好。如果你像我一样来自C#.NET背景,那么点表示法真的很有用。@JeremyP点表示法不是一个讨厌的东西,它会在否则会很糟糕的情况下清理代码。例如:
[[[CCDirector SharedDirectory]openGLView]层]设置掩码:nil],变成:
CCDirector.sharedDirector.openGLView.layer.mask=nil更简洁,更贴近C++C++的编码风格,这是Obj-C的基础。我想你会对订阅说同样的话,那就是它也是一种令人憎恶的行为?学会欣赏语言是如何发展和变得更加优雅的。请注意,使用
点语法不需要
@属性
,反之亦然。@Richard:我们必须同意不同意,但确实如此。它模糊了正在发生的事情,不适当地重载了点运算符,最糟糕的是破坏了动态绑定(尝试使用点表示法,将对象声明为type
id
)。用不必要的垃圾污染语法不会使Objective-C更优雅。
t.noOfWheels
实际上更糟糕。圆点符号是一种在出生时就应该被扼杀的令人憎恶的符号。除此之外,回答很好。如果你像我一样来自C#.NET背景,那么点表示法真的很有用。@JeremyP点表示法不是一个讨厌的东西,它会在否则会很糟糕的情况下清理代码。例如:
[[[CCDirector SharedDirectory]openGLView]层]设置掩码:nil],变成:
CCDirector.sharedDirector.openGLView.layer.mask=nil更简洁,更贴近C++C++的编码风格,这是Obj-C的基础。我想你会对订阅说同样的话,那就是它也是一种令人憎恶的行为?学会欣赏语言是如何发展和变得更加优雅的。请注意,使用
点语法不需要
@属性
,反之亦然。@Richard:我们必须同意不同意,但确实如此。它模糊了正在发生的事情,不适当地重载了点运算符,最糟糕的是破坏了动态绑定(尝试使用点表示法,将对象声明为type
id
)。用不必要的垃圾污染语法并不能使Objective-C更优雅。