如何让我的变量可供其他类访问?

时间:2011-11-07 16:54:11

标签: iphone objective-c xcode local-variables

变量bounds,width和height是当前的局部变量。我无法从其他类访问它们,甚至无法从其他方法访问它们。

如何让这些变量可用于整个实例?我已经尝试将它们放在.h文件中并将它们重命名为CGFloats无效。

#import "TicTacToeBoard.h"

@implementation TicTacToeBoard

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    CGRect bounds = [self bounds];
    float width = bounds.size.width;
    float height = bounds.size.height;

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetRGBStrokeColor(ctx, 0.3, 0.3, 0.3, 1);
    CGContextSetLineWidth(ctx, 5);
    CGContextSetLineCap(ctx, kCGLineCapRound);

    CGContextMoveToPoint(ctx, width/3, height * 0.95);
    CGContextAddLineToPoint(ctx, width/3, height * 0.05);
    CGContextStrokePath(ctx);

}

@end

4 个答案:

答案 0 :(得分:1)

bounds,width和height是仅存在于drawRect方法的上下文中的局部变量。

你为什么不用:

CGRect bounds = [self bounds];
float width = bounds.size.width;
float height = bounds.size.height;

在其他方法中?

答案 1 :(得分:1)

您可以使用属性使其他对象可以访问变量。

在你的界面中添加如下内容:

@property (nonatomic, retain) NSString *myString;

然后添加

@synthesize mystring;

到您的实施。

将创建两个方法来获取属性并进行更改。

[myObject myString]; // returns the property
[myObject setMyString:@"new string"]; // changes the property

// alternately, you can write it this way
myObject.myString;
myObject.mystring = @"new string";

您可以使用[self setMystring:@"new value"]更改类中属性的值,或者如果您已在接口中声明了相同的变量,然后从中创建属性,则可以继续在类中使用变量你是。

开发人员文档中有关于属性的更多信息:http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1

答案 2 :(得分:0)

使它们成为成员变量或属性并编写访问器或合成它们。 See the Objective-C language reference

答案 3 :(得分:0)

使用getter setter或使用

生成它
@property(nonatomic) CGFloat width;

@synthesize width;