我是客观c的首演,我不明白。 我练习了c ++,所以有些练习不是本能的。
1)
@implementation Car {
// Private instance variables
double _odometer;
}
为什么私有属性在.m文件中?
2)
@interface Car : NSObject {
// Protected instance variables (not recommended)
}
@property (copy) NSString *model;
-(void)drive
a)似乎模型被声明为属性,但为什么不建议在@interface中进行模式?
b)为什么驱动方法不在界面中?
3)
如果我没有使用函数分配作为NString的例子并使用@" ..."直接初始化它怎么办? ?
4)
在方法声明之前我也不理解+和 - 之间的区别..
提前致谢
答案 0 :(得分:2)
1.>为什么私有属性在.m文件中
为什么不呢? * .m内声明的所有内容都是私有的,因为* .m文件无法在某处导入(包含)。在目标C中,您可以在两个文件中声明实例变量 - * .h和* .m
2.a推荐的方法是使用访问器(Objective C中的@properties)。对于每个属性setter,都会生成getter和instance变量。
的默认名称@property (copy)NSString *str;
是:
- (void)setStr:(NSString*)obj; // setter
- (NSString*)str; //getter
NSString *_str; //instance variable
您可以修改访问者名称
@property (copy, setter = NewSetterName, getter = NewGetterName )NSString *str;
和实例变量名称(应该完成@implementation部分)
@synthesize str = _newStingInstanceVariable;
Ofcource你可以重写默认生成的setter和getter。
2.b界面是@implementation
和@end
之间的所有内容。在@interface之后的{}
区域 - 是一个可以声明实例变量的地方。
3.对NSStrings来说没问题
NSString *str = @"some text";
但是对于大多数课程来说,它不会像你期望的那样工作:
NSMutableString *str = @"some text";
// You will receive warning here! And str will be NSString, not NSMutableString
4. " +" - 类方法(在C ++中为静态)," - " - 实例方法。
答案 1 :(得分:0)
编程中的一般原则是,您应该向外部提供尽可能少的信息。 .h文件中的任何内容,世界上的任何人都可以查看,访问和搞砸。如果_odometer出现问题并且它在头文件中,则必须通过所有源代码来查找是否有错误。如果它只在.m文件中,你知道如果有问题,它就在.m文件中。
不公开的另一个原因是,如果没有人知道,你可以自由地改变它们。出于某种原因,你下个月决定首先使用_odometer不是一个好主意。到目前为止,已经有三个程序员改变了十几个文件来使用_odometer,因为它就在那里。所以删除那个_odometer现在很多,很多工作。如果它从未在.h文件中,则没有人使用它,因此您只需要更改自己的.m文件。