我想知道里程表变量在以下示例中的行为方式。我的意思是,由于它在扩展中声明是私有的吗?
//In Car.m
#import "Car.h"
@interface Car ()
@property (readonly) double odometer;
-(BOOL)engineIsWorking;
@end
我想知道里程表变量在以下示例中的行为方式。我的意思是,由于它在扩展中声明是私有的吗?
//In Car.m
#import "Car.h"
@interface Car ()
@property (readonly) double odometer;
-(BOOL)engineIsWorking;
@end
扩展中声明的变量/方法仅在它们被导入或在其中声明的编译单元中可见。
Car_Private.h
例如,您可以将扩展名#import "Car_Private.h"
放在一个名为. 通过这样做,将有效地访问和。Car.m
@implementation Car
Tire.m
Tire.m
engineIsWorking
odometer
也就是说,扩展只是你想要的那样“私有”。请注意,在 Objective-C 中没有什么是真正私有的。它仅在编译时是私有的。
是的。由于您在.m
文件中声明扩展名,并且您永远不会在任何地方使用#import
此.m
文件(您#import
是.h
),因此只有.m
文件中的代码才能访问此扩展名。
如文档中所述:
类扩展通常用于使用额外的私有方法或属性来扩展公共接口,以便在类本身的实现中使用。