Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.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 objective-c中私有(-)方法和公共(+)方法的最大区别是什么?_Ios - Fatal编程技术网

Ios objective-c中私有(-)方法和公共(+)方法的最大区别是什么?

Ios objective-c中私有(-)方法和公共(+)方法的最大区别是什么?,ios,Ios,在目标c中。我可以声明两种方法。私有方法,在类内部或由类实例访问。 例如 在.h文件中:我声明: -(void)privateMethodA; +(void)publicMethodA; 在.m文件中,我可以 [self privateMethodA]; 在其他类中,如classB.m文件;我也能做到 ClassA *objA; [objA privateMethodA]; 然而,对于公共方法。我想这就是所谓的静态方法 [ClassA publicMethodA]; 足够访问ClassB

在目标c中。我可以声明两种方法。私有方法,在类内部或由类实例访问。 例如 在.h文件中:我声明:

-(void)privateMethodA;
+(void)publicMethodA;
在.m文件中,我可以

[self privateMethodA];
在其他类中,如classB.m文件;我也能做到

ClassA *objA;
[objA privateMethodA];
然而,对于公共方法。我想这就是所谓的静态方法

[ClassA publicMethodA];
足够访问ClassB.m文件中的方法A了

总之,我可以跳过声明实例以访问私有方法的步骤,只需使用[ClassName publicMethodName]

为了方便起见,我可以将所有方法声明为public方法。。。 所以问题来了,对于好的程序设计,有什么区别?内存是否有一些方面,比如堆内存、堆栈内存

表示实例方法,+a类又称静态方法。这与公共与私人无关

要说明实例方法和类方法之间的区别,请考虑:

NSMutableArray *arr = [NSMutableArray array];
[arr addObject:@"foo"];
[arr addObject:@"bar"];
NSString *foobar = [arr componentsJoinedByString:@""];
array、addObject:和componentsJoinedByString:中的哪一个是类方法,哪一个是实例方法?你能交换他们的位置吗?如果可以,你会怎么称呼他们和+不是类似于UML的修饰符在ObjC的means-instance方法声明中,一个应该被发送到对象,+is类方法应该被发送到类本身

其他地方

Object* a = [[Object alloc] init];
[a instanceMethod];
[Object classMethod];
没有像ObjC中的私有方法那样的东西。由于其ObjC性质的“动态”检查消息传递,不可能检查某人在运行时调用该方法的权限

隐藏方法的唯一方法是将其私有化,即-不要在头文件中公开它

 //Header Object.h
 @interface Object
 - (void) publicMethod;
 @end

 //Implementation Object.m
 @implementation Object

 - (void) publicMethod {
 /*...*/
    [self privateMethod];  //absolutely legal
 }

 //private method - not exposed in @interface 
 - (void) privateMethod {
 /*...*/
 }

首先,你对私有和公共方法的理解是完全错误的。另外,静态方法和公共方法没有任何关系,尽管它看起来像公共方法。我真的建议读一些OOP基础知识

私有方法是可以从类本身内部访问的方法,而公共方法是可以从其他对象访问的方法,即用于与外部对象通信的方法。私有方法和公共方法都可以在初始化对象上使用,这意味着您必须创建类的对象才能使用这些方法

至于静态方法,静态方法可以用于未初始化的对象,它们不需要对象alloc init。

请阅读
 //Header Object.h
 @interface Object
 - (void) publicMethod;
 @end

 //Implementation Object.m
 @implementation Object

 - (void) publicMethod {
 /*...*/
    [self privateMethod];  //absolutely legal
 }

 //private method - not exposed in @interface 
 - (void) privateMethod {
 /*...*/
 }