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