Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.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
Objective c 如何创建Foo类的新实例而不在接口中公开其构造函数?_Objective C_Ios - Fatal编程技术网

Objective c 如何创建Foo类的新实例而不在接口中公开其构造函数?

Objective c 如何创建Foo类的新实例而不在接口中公开其构造函数?,objective-c,ios,Objective C,Ios,这与NewsstandKit.framework没有严格的关系,但这里有一个这种方法的实例: addIssueWithName:date:NKLibrary的实例方法创建一个报摊问题-NKIssue,并将其添加到内容库中,如果未失败,则返回该问题。此时,NKIssue实例具有name和date属性设置为最初传递给addIssueWithName:date:的值 如果您对此进行检查,NKIssue类没有特定的初始化方法(除了从NSObject继承的普通init),也没有@public实例变量(例如

这与
NewsstandKit.framework
没有严格的关系,但这里有一个这种方法的实例:

addIssueWithName:date:
NKLibrary的实例方法创建一个报摊问题-
NKIssue
,并将其添加到内容库中,如果未失败,则返回该问题。此时,
NKIssue
实例具有
name
date
属性设置为最初传递给
addIssueWithName:date:
的值

如果您对此进行检查,
NKIssue
类没有特定的初始化方法(除了从
NSObject
继承的普通
init
),也没有
@public
实例变量(例如
\u name
\u date
),其属性都是
只读的

@interface Carborundum ()
@property (copy, nonatomic) NSString * whiskers;
@property (retain, nonatomic) NSDate * inception;
@end
所以我不明白这整件事是怎么在内部运作的?我很想在我的一个库中模仿这种方法,但我真的不知道如何


谢谢。

苹果的代码可以访问苹果的代码。
NKIssue
readonly
属性可能在类扩展中重新声明为
readwrite
。看看TOCPL中的

在标题中,您可以看到:

@interface Carborundum : NSObject
@property (readonly, copy, nonatomic) NSString * whiskers;
@property (readonly, retain, nonatomic) NSDate * inception;
@end
在实现文件(或其他私有文件)中,有一个类扩展名具有相同的属性,具有完全相同的属性(这是必需的),除了
readonly

@interface Carborundum ()
@property (copy, nonatomic) NSString * whiskers;
@property (retain, nonatomic) NSDate * inception;
@end
它们像往常一样合成:

@implementation Carborundum

@synthesize whiskers;
@synthesize inception;

@end
这允许可以看到类扩展的代码(即其他UIKit代码)以读写方式使用属性,而只能访问标头的代码仅限于只读版本。这是由编译器而不是运行时强制执行的


这里有相当多的SO问题:

您将如何
@综合实施中的
问题?