我对IOS编程很陌生,前几天就来了这个:
说你有一个TestVC.h文件:
@interface TestVC : UIViewController
@property (strong, nonatomic) IBOutlet UIProgressView *progress;
@end
并在TestVC.m文件中(在顶部):
@interface TestVC ()
@property (strong, nonatomic) NSArray *levels;
@end
当您使用.h-file中的变量时,您会说self.progress
如果您使用.m文件中的变量,则为_levels
有什么区别?
答案 0 :(得分:1)
当你使用.h文件中的变量时,你会说self.progress
如果您使用.m文件中的变量,则为_levels
没有区别。 self.progress
和_progress
以及self.levels
和_levels
功能齐全。
但是,_
语法的 tiny 位更快,self.
语法是正确的方法,除非在少数情况下不这样做。有时使用_
会导致使用self.
解决的严重问题。有时self.
会导致问题。
基本上_
正在直接访问原始内存地址,self.
正在使用objective-c语言“正确”访问它。
在* .m与* .h中声明变量之间的区别在于* .m中的变量是隐藏的,因此源代码中的任何其他内容都不会看到它存在。它就在那里,但你会得到一个编译器警告它不存在。当它编译时它会起作用,因为它确实存在。
基本上在* .m中声明变量是一种说法“这件事在这里,但我不希望这个文件以外的任何东西都使用它”。它纯粹是装饰性的,对应用程序的运行方式没有影响。
作为一名新的Obj-C程序员,您应该始终使用self.levels
。每当您使用_levels
查看示例代码时,我都会将其更改为self.levels
。如果您遇到问题...请在此处查看您是否找到了应该使用_levels
的案例。
答案 1 :(得分:0)
无论是在.h还是.m文件中声明它们,它们都可以以任一格式使用。
最佳做法是使用getter / setter“self”。除了init和dealloc方法之外,格式无处不在,其中“_”直接访问方法通常被认为是更好的选择。