我有2个班,classA和classB。
ObjectA具有ObjectB的属性。现在的情况是 -
获取回调ObjectA释放ObjectB。按照以下方式做到了 -
[ObjectB发布]; ObjectB = nil;
那么如果如何解决这个问题?
感谢您的回答。
答案 0 :(得分:2)
在[ObjectB methodB2]执行后立即将回调移动到ObjectA。 或者创建两个回调:一个在[ObjectB methodB1]之后,另一个在[ObjectB methodB2]之后,在第二个回调之后释放ObjectB
答案 1 :(得分:0)
ObjectB.ObjectA = nil;
[ObjectB release];
ObjectB = nil;
答案 2 :(得分:0)
methodB1
在启动时应保留self
,并在完成后将其释放。
答案 3 :(得分:0)
这里有两个场景:
1)当ObjectA调用两次
时,ObjectB可以传递给它的不同属性2)对象B只传递一组属性,而对象A需要运行Bethod B1和B2,而ObjectB保留相同的属性。
3)如果对象B需要传递给它的新参数,请使用getter和setter吗?
情景1:
ObjectA.m:
...
ObjectB *objectB = [[ObjectB alloc] initWithSomeParameter:@"the parameter"];
NSString *callback1 = [objectB methodB1];
// why release when you can repoint?
ObjectB *objectB = [[ObjectB alloc] initWithSomeParameter:@"another parameter"];
NSString *callback2 = [objectB methodB2];
[objectB release];
情景2:
ObjectA.m:
...
ObjectB *objectB = [[ObjectB alloc] initWithSomeParameter:@"the parameter"];
NSString *callback1 = [objectB methodB1];
NSString *callback2 = [objectB methodB2];
[objectB release];
情景3:
ObjectA.m:
...
ObjectB *objectB = [[ObjectB alloc] initWithSomeParameter:@"the parameter"];
NSString *callback1 = [objectB methodB1];
[objectB setSomeParameter:@"another parameter"];
NSString *callback2 = [objectB methodB2];
[objectB release];
当你说ObjectB回电话?我希望你的意思不是:
ObjectA.m:
ObjectB *objectB = [[ObjectB alloc] initWithSomeParameter:@"the parameter"];
NSString *callback1 = [objectB methodB1];
...
ObjectB.m:
...
//DO some work in method B1
ObjectA *objectA [[ObjectA alloc] init];
[objectA callback];
那是一个记忆导致在你身边逼近然后......如果这就是你的意思,那么我建议你阅读上面的场景或者查看NSNotificationCentre Notifications以获得跨对象通知,即回调。