【问题标题】:Is any UIKit element declared in .h file public or protected in objective c?.h 文件中声明的任何 UIKit 元素是否在目标 c 中公开或受保护?
【发布时间】:2016-10-31 23:34:03
【问题描述】:

我是 iOS 开发的新手,我怀疑如果我在 some.h 文件中而不是在 .m 文件中声明任何 UIKit 元素,例如 UILabel *label,如果我导入它,它是受保护还是对其他类公开类到另一个类并通过使用这个类实例来访问它?

#import <UIKit/UIKit.h>

@interface Latestnews_ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIImageView *latestnewsbackimg;
@property (strong, nonatomic) IBOutlet UIImageView *latestnewsdateimg;
@property (strong, nonatomic) IBOutlet UILabel *latestnewsdate;

latestnewsdate 是公开的还是受保护的??

【问题讨论】:

  • 你需要提供一个例子。 C 和 ObjC 都有可能适用的规则,如果没有示例,就很难在答案中提供所有可能性。
  • 哦,数据类型对结果可见性完全没有影响。
  • @Avi 请看代码

标签: ios objective-c xcode public protected


【解决方案1】:

1)。任何导入“Latestnews_ViewController”的类都可以访问代码中的属性。即它对所有类都是公共的。

2)。你也可以在一个类中创建一个私有属性

示例:

@interface Latestnews_ViewController : UIViewController
{
NSString *latestnewsbackimg;  //private
NSString *latestnewsdateimg;  //private
}

NSArray *array;  //public

@end

【讨论】:

  • 受保护的变量呢??
  • 接口类A:NSObject{@protected int _myProtectedInt; } 结束
【解决方案2】:

.h 文件中声明的属性是public。因此,您可以通过任何类的Latestnews_ViewController 实例调用latestnewsdate。所以你可以称它为public。

【讨论】:

    【解决方案3】:

    你的类需要声明(接口)和定义(实现)。要使用类,您需要查看它的声明(以了解它有哪些方法)。因此,您可以在每个要使用类Foo 的文件中键入@interface Foo..。但这是痛苦。这就是为什么您将它移动到.h 文件并将其包含 到另一个文件中。

    严格来说,C 编译器的 .m 和 .h 文件没有区别。 .h 文件只是由预处理器包含,因此编译器可能会认为您直接在每个文件中包含类的声明。

    因此,如果您在接口中声明某些内容,并将带有此 inetrafce 的文件包含到另一个文件中,则整个接口都可以访问,没有任何东西是“受保护的”。在 ObjC 中没有所谓的“保护”。

    你所说的“声明任何 UIKit 元素”是 ObjC properties,字段、访问器和 mutator 的语法糖(你应该阅读属性)。它们是接口的一部分,不受保护。 field 怎么做,因为它不是界面的一部分。

    要使成员“受保护”,直接在实现它的 .m 文件中的接口中声明它。没有人会在这个文件之外知道它,因此它将受到保护。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-11
      • 2014-05-15
      • 1970-01-01
      • 2011-03-23
      • 2015-12-29
      • 2011-08-18
      • 1970-01-01
      相关资源
      最近更新 更多