我刚刚开始编写Objective-C编程,并且具有Java背景,想知道编写Objective-C程序的人如何处理私有方法.
我理解可能存在一些惯例和习惯,并将此问题视为人们在Objective-C中使用私有方法的最佳技术的聚合器.
请在发布时为您的方法添加一个参数.它为什么好?它有哪些缺点(你知道)以及你如何处理它们?
至于到目前为止我的发现.
可以使用MyClass.m文件中定义的类别 [例如MyClass(Private)]来对私有方法进行分组.
这种方法有两个问题:
第一个问题可以解决空类 [例如MyClass()].
第二个困扰我很多.我希望在文件末尾附近实现(和定义)私有方法; 我不知道这是否可能.
我想为我的实例变量使用属性,但在很多情况下,我只希望类本身可以访问setter.我希望我能做到这样的事情:
foo.h中:
@interface Foo {
NSString *bar;
}
@property (readonly) NSString *bar;
@end
Run Code Online (Sandbox Code Playgroud)
Foo.m:
#import "Foo.h"
@interface Foo ()
@property (copy) NSString *bar;
@end
@implementation Foo
@synthesize bar;
@end
Run Code Online (Sandbox Code Playgroud)
但这会产生一个警告:
Foo.m:4: warning: property ‘bar’ attribute in ‘Foo’ class continuation does not match class ‘Foo’ property
Run Code Online (Sandbox Code Playgroud)
我可以看到它在抱怨什么,但它似乎仍然是一个有用的习语.有没有其他方法可以在不写自己的二传手的情况下实现这一目标?
在Objective-C中,与.m文件相反,在头文件中定义内容(例如属性或方法)有什么区别?我听说它与将其公开或私有有关,但我不确定细节。如果是这样,这是否与Java中的公共方法和私有方法相同?
我精通Java,因此可以将Objective-C与Java关联的任何方式都会有所帮助。
谢谢
编辑:澄清一下,假设我有一个名为“ CalculatorBrain”的类(如果这是适当的术语),以下内容之间有什么区别(请注意NSMutableArray * operandStack:
在.m文件中:
@interface CalculatorBrain()
@property (nonatomic, strong) NSMutableArray *operandStack;
@end
Run Code Online (Sandbox Code Playgroud)
与.h文件中的:
@interface CalculatorBrain : NSObject
@property (nonatomic, strong) NSMutableArray *operandStack;
@end
Run Code Online (Sandbox Code Playgroud)
在定义NSMutableArray *的地方有什么区别?
我知道我们不能在类类别中添加实例变量,但是我们可以添加类继续,可以有人告诉我为什么或给我一些关于它的细节.我知道我们可以在类别中使用关联,我想知道有关实现的详细信息.非常感谢 .