学习Objective-C并阅读示例代码,我注意到对象通常是使用以下方法创建的:
SomeObject *myObject = [[SomeObject alloc] init];
Run Code Online (Sandbox Code Playgroud)
代替:
SomeObject *myObject = [SomeObject new];
Run Code Online (Sandbox Code Playgroud)
是否有理由这样做,因为我已经读到它们是等同的?
我需要-init在Objective-C中隐藏(私有)我的类的方法.
我怎样才能做到这一点?
我是开发相当大的iPad应用程序的团队的一员,因此我们创建了许多不同的类.问题是一些方法现在已经过时了,我不想简单地删除它们,因为我知道整个系统的某些部分使用这些方法......但是有更好的(更新的)变体可以使用相反(一些旧的实际上称为新的,但整体类接口变得混乱).
有没有一种方法可以将某些方法标记为折旧(如@deprecated在Java和[Obsolete].NET中).
我看到Apple使用Availability.h并且有标签,例如
__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_3_0);
Run Code Online (Sandbox Code Playgroud)
...这是唯一的方法(+ App Store是否可以安全地执行此操作?)或者是否有替代方案会在Xcode中标记警告?
我创建了一个不同的init方法,并希望它是指定的初始化程序而不是标准-init.如何防止客户端代码使用实例化类-init?
例如
/* everyone must call this */
- (id)initWithInfo:(NSDictionary *)info {
self = [super init];
if (self) {
_info = info;
}
return self;
}
/* Don't want anyone to be able to create this using init */
Run Code Online (Sandbox Code Playgroud)