【问题标题】:Using variables in methods in objective c在目标 c 的方法中使用变量
【发布时间】:2011-04-29 18:40:23
【问题描述】:

有没有办法在方法中定义一个对象,调用另一个对象的方法,并在该方法中使用第一个对象:

-(IBAction)method{
    class * instance = [[class alloc] initWithValue:value];
    [instance method];
}

class.m文件中定义的方法:

-(void) method {
    instance.value = someOtherValue;
}

【问题讨论】:

  • 什么意思? valuesomeOtherValue 是什么?
  • value 将是变量的原始值,而 someothervalue 将是分配给实例的新值。你的意思是具体值是多少?

标签: objective-c cocoa-touch object methods


【解决方案1】:

简单的解决方法是作为参数传入:

[instance method:self];
...
- (void) method:(class *)caller { ...

然而,为了避免两个类过于紧密地耦合在一起,通常使用协议来定义回调的语义,并通过首先分配委托来将方法调用与回调处理程序的规范分开,然后调用方法。这有点涉及,我希望我正确地涵盖了所有细节。

// Foo.h
@class Foo;

@protocol FooDelegate
- (void)doSomethingWithFoo:(Foo*)caller;
@end

@interface Foo {
    id<FooDelegate> delegate;
}

@property (nonatomic, retain) id<FooDelegate> delegate;

- (void)method;

@end

// Foo.m
@implementation Foo

@synthesize delegate;

- (void)method {
    [delegate doSomethingWithFoo:self];
}

@end

 

// Bar.h
#import "Foo.h"

@interface Bar<FooDelegate> {
}

// Bar.m
@implementation Bar

- (IBAction)method {
    Foo *foo = [[Foo alloc] init...];
    foo.delegate = self;
    [foo method];
}

- (void)doSomethingWithFoo:(Foo*)caller {
    NSLog(@"Callback from %@", caller);
}

@end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多