当前位置: 代码迷 >> Iphone >> 新人请问一个关于Objective-c的语法有关问题
  详细解决方案

新人请问一个关于Objective-c的语法有关问题

热度:43   发布时间:2016-04-25 06:24:38.0
新人请教一个关于Objective-c的语法问题
实在不知道这个问题应该提在哪,反正跟IOS有关反正就先放这吧,如果有问题,请版主劳神给挪下。

问题:在学Ovjective-c的基础教程这本书,但是看了大部分,语法中始终有一个地方不太懂,身边又没人可以请教,在这请各位前辈帮忙指点一下。
#import<Cocoa/Cocoa.h>

@class Tire
@class Engine
@interface Car:NSObject{
  NSString *name;
  NSMutableArray *tires;
  Engine *engine;
}
-(void)setName:(NSString *)newName;
-(NSString *)name;

-(void)setEngine:(Engine *)newEngine;
-(Engine *)engine;

-(void)setTire:(Tire *)tire
  atIndex:(int)index;
-(Tire *)tireAtIndex:(int)index;

-(void)print;
@end


问题就是以上标红的代码,知道功能,但是始终看不懂什么意思,是不是一种简写方式,烦请前辈指点一二,如果再多举个例子或者稍微扩展下就更感谢了。

------解决方案--------------------
看不懂哦,这么复杂
------解决方案--------------------
此写法不是一种简洁的方式,比较老的方式。它指的是一个变量的getter 和setter 方法。
如果用比较简洁的方式可以用:(m文件)@property(retain,nonatimic) NSString *name; 
(h文件) @synthesize name;
(nonatimic,retain,assign,copy,readonly,readwrite,)这些属性主要事完成getter setter 的操作(这个很重要的哦 !很多初学者都在这里迷惑哦)
@property预编译命令的作用是自动声明属性的setter和getter方法 
@synthesize也是一种新的编译器功能,表示“创建该属性的访问器”
2行比较简洁的code完全可以代替你代码中声明的name变量方法。
-(void)setName:(NSString *)newName;
-(NSString *)name;
只需要写h和m文件中分别写入:@property Synthesize 即可。(@property与Synthesize是一一对应的,m中如果声明了@property,那么h中应有Synthesize)
LZ不需要提留在这里,你只要知道你的代码是对一个变量的取值和设值对这个变量进行操作就行。继续往后看,你所看的书籍后面应该会提到@property 和 Synthesize带来的好处。