我的Car.m
实施文件如下。这里我有一个私人方法 engineStarting 。
这里我使用了类扩展概念来介绍
私有方法,我也使用Car+Maintainance
作为类别。
#import "Car.h"
//private methods
@interface Car()
-(BOOL) engineStarting;
@end
@implementation Car
@synthesize model=_model;
-(void)drive{
NSLog(@"%@ is driving",_model);
}
-(void)stop{
NSLog(@"%@ has stopped now",_model);
}
-(void)turnleft{
NSLog(@"%@ is turning left",_model);
}
-(void)turnright{
NSLog(@"%@ is turning right",_model);
}
-(BOOL) engineStarting{
return true;
}
我的 main.m 文件看起来像
#import <Foundation/Foundation.h>
#import "Car.h"
#import "Car+Maintanance.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
Car *car=[[Car alloc]init];
car.model=@"maruti";
//using car its own methods
// i am getting error in this line(no visible @interface......)
[car engineStarting];
[car drive];
[car stop];
[car turnleft];
[car turnright];
//using maintainanace
if([car neddOilChange]){
[car changeOil];
}
}
return 0;
}
答案 0 :(得分:0)
正如您所说,您已经创建了私有方法-(BOOL) engineStarting
,这意味着您可以在汽车类中访问它。
如果您希望在main.m文件中显示该方法,请将声明移至car.h文件,它将公开。
答案 1 :(得分:0)
你说你想私下保留-engineStarting
,但是在实施之外使用它?这是相互矛盾的,因为私有意味着:&#34;在实施之外是不可见的。&#34;
可能你对这些条款搞砸了。你是对的:没有黑白私有/公共对,但是灰度:只有实现(通常称为私有),实现和子类实现(通常称为protected),才能看到某些内容一个实现和子类实现和友元类(在一个框架中,通常称为包)和public。除此之外,您还可以将方法公开给某些子系统(模块)等等。所以它非常复杂。
您可以为此做些什么,就是创建一个单独的类别,并将该类别文件的标题导入到应该可见的区域。
//Car_PublicInFrameworkAddition.h
@interface Car(PublicInFrameworkAddition)
-(BOOL) engineStarting;
@end
//Car_PublicInFrameworkAddition.m
@implementation Car(PublicInFrameworkAddition)
-(BOOL) engineStarting
{
…
}
@end
Somewhere.m
// Somewhere should see the addition
#import "Car_PublicInFrameworkAddition.h"