为什么有时需要在将对象作为参数传递之前创建变量

哈格

我在osx的目标C中构建了一个应用程序,并且ii不理解为什么有时需要在将其作为参数传递之前将一个对象放入变量中。

通常,这种传递参数的方式效果很好

[object function:[[MyObject alloc]init]];

但是当我在我的应用程序中尝试这样做时

[NSApp setDelegate:[[LHUAppDelegate alloc]init]];

我收到运行时错误的访问错误,所以我必须这样做

LHUAppDelegate* ad = [[LHUAppDelegate alloc]init]; [NSApp setDelegate:ad];

我在其他几次场合都遇到过这个问题,但我从来没有真正理解过为什么,而且我似乎找不到答案。任何帮助深表感谢

我的应用程序委托完全为空,而我的main.c看起来像这样

#include <Cocoa/Cocoa.h>
#include "LHUAppDelegate.h"
#include "LHUView0.h"

int main(int argc, const char * argv[])
{

    [NSApplication sharedApplication];

    LHUAppDelegate* ad = [[LHUAppDelegate alloc]init];
    [NSApp setDelegate:ad];

    NSWindow* w = [[NSWindow alloc]initWithContentRect:NSMakeRect(0, 0, 600, 400) styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:YES];
    [w setTitle:@"cocoagl"];
    [w center];

    LHUView0* glv = [[LHUView0 alloc]initWithFrame:NSMakeRect(0, 0, 0, 0) pixelFormat:[NSOpenGLView defaultPixelFormat]];
    [w setContentView:glv];

    [w makeKeyAndOrderFront:w];

    [NSApp run];

    return 0;
}
灰鼠

在第一个示例中,设置NSApp的委托将不会保留您的LHUAppDelegate实例。将其存储在当前作用域的变量中将保留它,并调用您期望的正常ARC行为-保留,然后在作用域完成时保留-1来保留(在此示例中,这几乎是应用程序的退出)。

NSApp委托定义为:

@property(assign) id< NSApplicationDelegate > delegate

assign暗示__unsafe_unretained代表通常(总是?)是用这种方式定义的,因为在实例上“设置代表”通常并不/不应该暗示所有权的转移。

在您的第一个示例中,在完成作用域时,LHUAppDelegate实例的保留计数达到零(并由ARC为您重新分配)setDelegate:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我有时需要在 proc 作为 arg 传递时使用 & 前缀?

来自分类Dev

为什么有时不需要在Lambda中捕获const变量?

来自分类Dev

为什么在动作参数中有时需要传递lambda而不是其他时间?

来自分类Dev

当传递可调用对象作为参数时,为什么g ++会抱怨“之前的无效声明符”?

来自分类Dev

为什么有时需要在`data.frame()`中将`.`括在`do`中的命名参数中?

来自分类Dev

为什么Python有时不为函数参数创建新对象?

来自分类Dev

当将对象作为参数传递时,为什么要调用析构函数但不调用构造函数?

来自分类Dev

为什么 Moq 有时需要在 Returns 中进行显式类型声明?

来自分类Dev

为什么有时我们需要在根目录下挂载那些文件?

来自分类Dev

为什么有时需要在docker上运行nginx?

来自分类Dev

为什么我有时需要在列表中使用 key()?

来自分类Dev

为什么在创建类对象时需要提供注入的参数?

来自分类Dev

将对象作为参数传递给C ++时修改的对象

来自分类Dev

将对象作为变量传递

来自分类Dev

打字稿:为什么传递对象和分配给该对象的变量作为参数之间有区别?

来自分类Dev

为什么有时可以将对临时对象的函数调用运算符解释为不包含参数的声明?

来自分类Dev

为什么将对象作为指针传递但不在返回范围时超出范围

来自分类Dev

有什么方法可以动态地将对象属性作为单个参数传递?

来自分类Dev

在Java中将对象和原始数据作为参数传递有什么区别?

来自分类Dev

Javascript:当对象拥有函数时,为什么在apply方法中将相同的对象作为参数传递?

来自分类Dev

为什么有时在使用变量之前将其赋值“ null”

来自分类Dev

当您可以直接将变量作为指针指向时,为什么要在C中创建指针?

来自分类Dev

为什么要在条带化充电之前创建客户对象?

来自分类Dev

在计算对象中的字母数时,为什么需要在增加对象之前测试该属性是否存在?

来自分类Dev

有时传递过多的参数会起作用,为什么?

来自分类Dev

当通过prop传递时,为什么需要状态变量的setter作为useEffect的依赖项?

来自分类Java

这是为什么int数组而不是作为一个对象变量参数数组传递?

来自分类Dev

在Javascript中将对象作为参数传递-不仅是参数,还包括根据变量构建的参数

来自分类Dev

在Java中,为什么在创建新对象时有时将父类放在左侧?

Related 相关文章

  1. 1

    为什么我有时需要在 proc 作为 arg 传递时使用 & 前缀?

  2. 2

    为什么有时不需要在Lambda中捕获const变量?

  3. 3

    为什么在动作参数中有时需要传递lambda而不是其他时间?

  4. 4

    当传递可调用对象作为参数时,为什么g ++会抱怨“之前的无效声明符”?

  5. 5

    为什么有时需要在`data.frame()`中将`.`括在`do`中的命名参数中?

  6. 6

    为什么Python有时不为函数参数创建新对象?

  7. 7

    当将对象作为参数传递时,为什么要调用析构函数但不调用构造函数?

  8. 8

    为什么 Moq 有时需要在 Returns 中进行显式类型声明?

  9. 9

    为什么有时我们需要在根目录下挂载那些文件?

  10. 10

    为什么有时需要在docker上运行nginx?

  11. 11

    为什么我有时需要在列表中使用 key()?

  12. 12

    为什么在创建类对象时需要提供注入的参数?

  13. 13

    将对象作为参数传递给C ++时修改的对象

  14. 14

    将对象作为变量传递

  15. 15

    打字稿:为什么传递对象和分配给该对象的变量作为参数之间有区别?

  16. 16

    为什么有时可以将对临时对象的函数调用运算符解释为不包含参数的声明?

  17. 17

    为什么将对象作为指针传递但不在返回范围时超出范围

  18. 18

    有什么方法可以动态地将对象属性作为单个参数传递?

  19. 19

    在Java中将对象和原始数据作为参数传递有什么区别?

  20. 20

    Javascript:当对象拥有函数时,为什么在apply方法中将相同的对象作为参数传递?

  21. 21

    为什么有时在使用变量之前将其赋值“ null”

  22. 22

    当您可以直接将变量作为指针指向时,为什么要在C中创建指针?

  23. 23

    为什么要在条带化充电之前创建客户对象?

  24. 24

    在计算对象中的字母数时,为什么需要在增加对象之前测试该属性是否存在?

  25. 25

    有时传递过多的参数会起作用,为什么?

  26. 26

    当通过prop传递时,为什么需要状态变量的setter作为useEffect的依赖项?

  27. 27

    这是为什么int数组而不是作为一个对象变量参数数组传递?

  28. 28

    在Javascript中将对象作为参数传递-不仅是参数,还包括根据变量构建的参数

  29. 29

    在Java中,为什么在创建新对象时有时将父类放在左侧?

热门标签

归档