Objective c 目的何在?
我对以下短语中的“否则”和“只要”用法感到困惑 否则,只要 实现方法遵循静态类型的签名。 如果ARC暴露于无效指针,则为未定义行为 就ARC而言,有效对象是具有«良好行为»的对象 保留操作。具体而言,对象的布局必须符合以下要求: Objective-C消息发送机制可以成功发送它 以下信息:Objective c 目的何在?,objective-c,automatic-ref-counting,Objective C,Automatic Ref Counting,我对以下短语中的“否则”和“只要”用法感到困惑 否则,只要 实现方法遵循静态类型的签名。 如果ARC暴露于无效指针,则为未定义行为 就ARC而言,有效对象是具有«良好行为»的对象 保留操作。具体而言,对象的布局必须符合以下要求: Objective-C消息发送机制可以成功发送它 以下信息: retain,不接受任何参数并返回指向对象的指针 释放,不接受任何参数并返回void 自动释放,不带参数并返回指向对象的指针 我们能推断出以下几点吗 …(忽略其他情况)…如果实现方法遵循静态类型的签名,
- retain,不接受任何参数并返回指向对象的指针
- 释放,不接受任何参数并返回void李>
- 自动释放,不带参数并返回指向对象的指针
void (^blockPointerTypeVariable)(int);
如果将blockPointerTypeVariable
设置为指向非块的对象,则程序的行为未定义。(您可以将其设置为指向具有不同类型签名的块,而不违反ARC的要求。但是,您不能将其设置为指向UIView
)
这是一个带有“Class
type”的“可保留对象指针”变量:
Class someClass;
这里有一个“可保留的对象指针”变量,其“Class
type”为“协议限定”:
Class<SomeProtocol> someClassWithProtocol;
就ARC而言,您可以将此指针设置为指向任何对象,只要对象具有与UIView
针对retain
、release
和autorelease
相同的类型签名。如果您将查看retain
指向具有不同类型签名的对象,则由于-[UIView retain]
的性质,程序的行为未定义
第二段
只要anything与Objective-C消息发送系统配合使用(即objc\u msgSend
函数及其变体),就可以将该view
变量设置为指向任何对象,只要anywhere在接收到保留
、释放
和自动释放
消息时具有所描述的语义
特别是,这意味着您可以将它指向那些不是Objective-C类实例的东西,如果您小心地使这些东西的内存布局符合objc\u msgSend
的期望,并且只要您使这些东西正确地响应retain
、release
,苹果就会这样做这有核心基础类型(虽然它没有被确切地记录)。
UIView *view;