这与NewsstandKit.framework
并不严格相关,但这里有一个实用的例子:
addIssueWithName:date:
的{{1}}实例方法会创建报刊亭问题 - NKLibrary
- 并将其添加到内容库中,如果出现非故障,则将其返回。此时NKIssue
实例的NKIssue
和name
属性设置为最初传递给date
的值。
如果你检查出来,addIssueWithName:date:
类没有特定的初始化方法(除了从NKIssue
继承的普通init
)和NSObject
实例变量(例如@public
和_name
)及其属性均为_date
。
所以我不明白整个事情在内部如何运作?我很乐意在我的一个库中模仿这种方法,但无法弄清楚如何......
感谢。
答案 0 :(得分:0)
Apple的代码可以访问Apple的代码。 readonly
的{{1}}属性很可能在类扩展中重新声明为NKIssue
。请查看TOCPL中的"Property Redeclaration"。
在标题中,您会看到:
readwrite
在实现文件(或其他私有文件)中,有一个具有相同属性的类扩展,具有完全相同的属性(这是必需的),除了@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
这允许可以看到类扩展的代码(即其他UIKit代码)将属性用作读写,而只能访问头的代码仅限于只读版本。这是由编译器强制执行的,而不是运行时。
有相当多的SO问题:https://stackoverflow.com/search?q=%5Bobjc%5D+redeclare+property