【问题标题】:Do methods call retain on arguments when they get called?方法调用时是否保留参数?
【发布时间】:2011-05-12 13:26:32
【问题描述】:

如果我在 Objective-C 中调用带有参数的方法并在后面释放参数。

id argumentI = [Object new]; 
[ classA method1: argumentI ];
[ argumentI release ];

然后我知道参数是在方法 1 完成后释放的,因为这些行是线性处理的。 但是当我在后台线程中调用该方法时:

[ NSThread detachNewThreadSelector:@selector(method1) toTarget:self withObject:argumentI ];
[ argumentI release ];

然后主线程释放对象,而后台作业将参数用于某事 (通过接受,在调用该方法之前,retainCount 将为 1)。 由于使用了 Zombie(使用已被释放的对象),我会收到错误吗?

问题是:

方法调用是否保留在作为参数的对象上?或者我需要在方法的开头调用retain,如果是像上面的问题?

【问题讨论】:

    标签: objective-c memory-management methods concurrent-programming


    【解决方案1】:

    来自detachNewThreadSelector:toTarget:withObject:documentation

    对象aTarget 和anArgument 在分离线程执行期间被保留,然后被释放。

    【讨论】:

    • 因此,OP 提出的问题的答案分别是“否”和“否”,因为正如您指出的那样,-detachNewThreadSelector: 在线程执行期间明确保留了目标和参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 2017-08-22
    • 1970-01-01
    • 2012-05-05
    • 2011-07-05
    • 2015-06-28
    • 1970-01-01
    相关资源
    最近更新 更多