我刚刚开始编写Objective-C编程,并且具有Java背景,想知道编写Objective-C程序的人如何处理私有方法.
我理解可能存在一些惯例和习惯,并将此问题视为人们在Objective-C中使用私有方法的最佳技术的聚合器.
请在发布时为您的方法添加一个参数.它为什么好?它有哪些缺点(你知道)以及你如何处理它们?
至于到目前为止我的发现.
可以使用MyClass.m文件中定义的类别 [例如MyClass(Private)]来对私有方法进行分组.
这种方法有两个问题:
第一个问题可以解决空类 [例如MyClass()].
第二个困扰我很多.我希望在文件末尾附近实现(和定义)私有方法; 我不知道这是否可能.
我想创建一个无法从外部访问的实例变量.在objective-c中有可能是这样的吗?我记得Apple有私有变量和类似的东西,但如果人们知道它们,他们就可以使用它们.Apple称之为"私有API",但显然其他人可以访问那些东西,如果他们发现那里有什么.
到目前为止,我认为像这样的东西创建了一个私有实例变量:
@interface MyClass : NSObject {
CGFloat weight;
}
Run Code Online (Sandbox Code Playgroud)
没有@property,没有@synthesize,只是上面的声明.
另外我知道Apple添加了一个_inFrontOfTheirPrivateInstanceVariables,但他们说某些地方他们不喜欢看到其他人这样做,因为他们可能会在执行此操作时覆盖意外隐藏的实例变量.
这里的诀窍是什么?
如果我定义了这个类,如何someObject在没有编译器错误的情况下访问子类中的属性?
@interface MyBaseClass
// someObject property not declared here because I want it to be scoped
// protected. Only this class instance and subclass instances should be
// able to see the someObject property.
@end
// This is a private interface extension...properties declared here
// won't be visible to subclasses. However, I don't see any way to
// declare protected properties...
@interface MyBaseClass (private)
@property (nonatomic, readwrite, retain) NSObject *someObject;
@end
Run Code Online (Sandbox Code Playgroud)
@interface MySubclass : MyBaseClass
@end
@implementation MySubclass …Run Code Online (Sandbox Code Playgroud) 当我定义一个继承自的新类时NSObject:
@interface Photo : NSObject
{
NSString* caption;
NSString* photographer;
}
@property NSString* caption;
@property NSString* photographer;
@end
Run Code Online (Sandbox Code Playgroud)
是新类继承的所有类方法(如alloc)吗?NSObjectPhoto
现在已经超过5个月,我在Objective-C,我也在App Store发布了我的第一个应用程序,但我仍然怀疑该语言的核心功能.
什么时候我应该使用self访问iVars,当我不是?
在释放插座时,您self.outlet = nil在viewDidUnload中dealloc写入,而不是在您写入时[outlet release].为什么?
在阅读了关于@private的问题后,我明白了它是如何工作的.但是,由于所有变量都默认为@protected,并且在没有定义访问器的情况下无法真正访问变量,@public究竟做了什么?你什么时候用它?
objective-c ×6
cocoa ×2
class-method ×1
cocoa-touch ×1
inheritance ×1
iphone ×1
oop ×1
private ×1
self ×1
subclass ×1
visibility ×1