Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios .h文件中的变量,而不是objective-C中的.m文件_Ios_Objective C_Class - Fatal编程技术网

Ios .h文件中的变量,而不是objective-C中的.m文件

Ios .h文件中的变量,而不是objective-C中的.m文件,ios,objective-c,class,Ios,Objective C,Class,我对IOS编程相当陌生,前几天我来过这里: 假设您有一个TestVC.h文件: @interface TestVC : UIViewController @property (strong, nonatomic) IBOutlet UIProgressView *progress; @end 在TestVC.m文件中(顶部): 当您使用.h文件中的变量时,您会说self.progress 如果使用.m文件中的变量,则它是\u levels 区别是什么?无论在.h或.m文件中声明,它们都可以以

我对IOS编程相当陌生,前几天我来过这里:

假设您有一个TestVC.h文件:

@interface TestVC : UIViewController 
@property (strong, nonatomic) IBOutlet UIProgressView *progress;
@end
在TestVC.m文件中(顶部):

当您使用.h文件中的变量时,您会说
self.progress

如果使用.m文件中的变量,则它是
\u levels


区别是什么?

无论在.h或.m文件中声明,它们都可以以任何一种格式使用

最佳实践是在任何地方都使用getter/setter“self.”格式,但init和dealoc方法可能除外,因为通常认为直接访问方法是更好的选择

当您使用.h-file中的变量时,您会说self.progress

如果使用.m文件中的变量,则为_levels

没有区别<代码>自我进度和
\u进度
自我水平
\u水平
都功能完善

但是,
\uu
语法要快一点,而
self.
语法是正确的方法,除非在少数情况下不是这样。有时使用
会导致严重问题,使用
self.
可以解决这些问题。有时,
self.
会引起问题

基本上,
直接访问原始内存地址,
self.
使用objective-c语言“正确”访问它

在*.m中声明变量与在*.h中声明变量的区别在于*.m中的变量是隐藏的,因此源代码中没有其他内容可以看到它的存在。它在那里,但您将得到一个编译器警告,它不存在。当它编译时,它会工作,因为它确实存在

基本上,在*.m中声明变量是一种表示“这个东西在这里,但我不希望这个文件之外的任何东西使用它”的方式。这纯粹是装饰性的,对应用程序的功能没有影响


作为一名新的Obj-C程序员,您应该始终使用
self.levels
。每当您看到使用
\u levels
的示例代码时,我都会将其更改为
self.levels
。如果你遇到问题。。。在这里询问您是否发现了应该使用
\u levels
的情况。

-基本上在*.m中声明变量是一种表示“这个东西在这里,但我不希望这个文件之外的任何东西使用它”的方式,因此它基本上是一种使变量/函数私有化的方式?是的,这和私密性是一样的,只是它实际上并没有私密性。注意,iOS确实支持适当的形式私有属性,但一般来说,Obj-C程序员更喜欢按约定行事,而不是受语言限制。例如,将一个方法设为伪私有而不是实际私有意味着您可以从单元测试或作为另一个类(伴随类)的一部分的第二个类访问它。一个适当的私有财产不允许这种灵活性。它不是私有的,只是没有文档记录。Obj-C程序员信任类的文档/公共API,而不是它的技术实现方式。假设实现可以随时更改(例如,在*.m中声明的属性可以重命名),但官方属性(在*.h中的任何内容)始终存在,即使删除或重命名该属性,旧属性仍将作为新行为的别名存在。
@interface TestVC ()
@property (strong, nonatomic) NSArray *levels;
@end