Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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 目的何在?_Objective C_Automatic Ref Counting - Fatal编程技术网

Objective c 目的何在?

Objective c 目的何在?,objective-c,automatic-ref-counting,Objective C,Automatic Ref Counting,我对以下短语中的“否则”和“只要”用法感到困惑 否则,只要 实现方法遵循静态类型的签名。 如果ARC暴露于无效指针,则为未定义行为 就ARC而言,有效对象是具有«良好行为»的对象 保留操作。具体而言,对象的布局必须符合以下要求: Objective-C消息发送机制可以成功发送它 以下信息: retain,不接受任何参数并返回指向对象的指针 释放,不接受任何参数并返回void 自动释放,不带参数并返回指向对象的指针 我们能推断出以下几点吗 …(忽略其他情况)…如果实现方法遵循静态类型的签名,

我对以下短语中的“否则”和“只要”用法感到困惑

否则,只要 实现方法遵循静态类型的签名。 如果ARC暴露于无效指针,则为未定义行为

就ARC而言,有效对象是具有«良好行为»的对象 保留操作。具体而言,对象的布局必须符合以下要求: Objective-C消息发送机制可以成功发送它 以下信息:

  • retain,不接受任何参数并返回指向对象的指针
  • 释放,不接受任何参数并返回void
  • 自动释放,不带参数并返回指向对象的指针

我们能推断出以下几点吗

…(忽略其他情况)…如果实现方法遵循静态类型的签名,ARC将强制执行Objective-C类型系统。

它是在谈论保留、释放和自动释放方法的签名吗?如果有,是否有负面意义

如果实施方法遵循静态类型的签名,ARC将不会实施Objective-C类型系统。

全文如下:

可保留的对象指针可以是空指针,也可以是指向有效对象的指针。此外,如果它具有块指针类型且不为null,则它实际上必须是指向块对象的指针,如果它具有类类型(可能是协议限定的),则它实际上必须是指向类对象的指针。否则,只要实现方法遵循静态类型的签名,ARC就不会执行Objective-C类型系统。如果ARC暴露于无效指针,则为未定义行为

英语语法有点复杂,但它说,如果指针没有声明为类,那么ARC对它没有任何作用。

第一段 下面是一个带有“块指针类型”的“可保留对象指针”变量:

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;