我是Cocoa的新手,我想确保我使用的样式和代码符合我的目的。
具体在标题中(标记为a)
),将变量设置在@interface
之外会产生什么影响?
其次,在实例中使用变量(在b)
处)而不在类声明中注册它会产生什么影响?
标题文件:
#import <UIKit/UIKit.h>
///////////// a) Is this good use?
int myint;
/////////////
@interface InstancecheckViewController : UIViewController
- (IBAction)plusone:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *counting;
@end
实现:
#import "InstancecheckViewController.h"
@interface InstancecheckViewController ()
@end
@implementation InstancecheckViewController
@synthesize counting;
///////////////////// b) is this good use?
- (void)resetit {
myint = 0;
}
/////////////////////
- (IBAction)plusone:(id)sender {
myint ++;
if (myint >10){
[self resetit];
}
NSString* myNewString = [NSString stringWithFormat:@"%d", myint];
counting.text = myNewString;
}
@end
修改
感谢大家的意见。
我想我现在已经正确地重新定义了实例和.h
@interface instancecheckViewController : UIViewController
{
@private
int myint;
}
- (IBAction)plusone:(id)sender;
- (void)resetIt;
@end
答案 0 :(得分:1)
使用:
///////////// a) Is this good use?
int myint;
/////////////
你已经宣布了一个全局的,可变的变量。它与实例变量不同。这不应该使用。此外,它是定义 - 这种方法会导致链接器错误。
使用:
///////////////////// b) is this good use?
- (void)resetit {
myint = 0;
}
/////////////////////
你正在写一个全局的,可变的变量。这不是线程安全的。这并不意味着ivar是隐式线程安全的,但是全局访问通常更安全,因为它的访问仅限于实例。
将其声明为实例变量:)
答案 1 :(得分:0)
通过这种方式,您将声明一个跨实例共享的全局变量。因此,如果您从类的实例更改它,它将影响所有其他实例。我不确定你是否想要这个;如果您不需要明确上述行为,我建议您使用实例变量。
答案 2 :(得分:0)
只需2美分。这是一个全局变量并不是很好。最好不要养成使用它的习惯。您很少会看到使用全局变量的代码。如果您了解Objective-C的所有基础知识,即协议,类别,扩展,您将看到您无论如何都很少需要全局变量。