0

我想知道里程表变量在以下示例中的行为方式。我的意思是,由于它在扩展中声明是私有的吗?

 //In Car.m
#import "Car.h"
@interface Car ()
@property (readonly) double odometer;
-(BOOL)engineIsWorking;
@end
4

2 回答 2

2

扩展中声明的变量/方法仅在它们被导入或在其中声明的编译单元中可见。

Car_Private.h例如,您可以将扩展名#import "Car_Private.h"放在一个名为. 通过这样做,将有效地访问和。Car.m@implementation CarTire.mTire.mengineIsWorkingodometer

也就是说,扩展只是你想要的那样“私有”。请注意,在 Objective-C 中没有什么是真正私有的。它仅在编译时是私有的。

于 2013-10-02T15:33:25.027 回答
1

是的。由于您在.m文件中声明扩展名,并且您永远不会在任何地方使用#import.m文件(您#import.h),因此只有.m文件中的代码才能访问此扩展名。

文档中所述

类扩展通常用于使用额外的私有方法或属性来扩展公共接口,以便在类本身的实现中使用。

于 2013-10-02T15:18:23.190 回答