本帖最后由 wenwei19861106 于 2012-12-03 12:28:38 编辑 首先我在.h中这样写
#import <UIKit/UIKit.h>
@interface wenViewController : UIViewController{
NSString *key;
}
我在.m文件件中可以访问和修改key
第二种方法是在.h文件中这样写
#import <UIKit/UIKit.h>
@interface wenViewController : UIViewController{
NSString *key;
}
@property (nonatomic, retain) NSString *key;
这样2种写法都可以进行读写 又区别吗
------最佳解决方案--------------------
JAVA中的成员变量与属性。
------其他解决方案--------------------
proprety属于抽象概念,实体变量则是在结构中的存储槽,正常情况下,其他对象不能直接访问它们。而property是对象的属性,可以访问。此外,property可以返回或发送一个实体变量, 看下面的例子
@interface Person : NSObject {
NSString *name;
}
@property(copy) NSString *name;
@property(copy) NSString *firstName;
@property(copy) NSString *lastName;
@end
@implementation Person
@synthesize name;
- (NSString *)firstName {
[[name componentsSeparatedByString:@" "] objectAtIndex:0];
}
- (NSString *)lastName {
[[name componentsSeparatedByString:@" "] lastObject];
}
- (NSString *)setFirstName:(NSString *)newName {
NSArray *nameArray = [name componentsSeparatedByString:@" "];
NSArray *newNameArray [[NSArray arrayWithObjects:newName, nil] arrayByAddingObjectsFromArray:[nameArray subarrayWithRange:NSMakeRange(1, [nameArray size]-1)]];
self.name = [newNameArray componentsJoinedByString:@" "];
}
- (NSString *)setLastName:(NSString *)newName {
NSArray *nameArray = [name componentsSeparatedByString:@" "];
NSArray *newNameArray [[nameArray subarrayWithRange:NSMakeRange(0, [nameArray size]-2)] arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:newName, nil]];
self.name = [newNameArray componentsJoinedByString:@" "];
}
@end
代码中假设name已经存在,并且有两部分(比如像Bill Gates这样,而不是Gates这种)
------其他解决方案--------------------
在Object-c中添加属性之前,程序员通常会定义一些方法用于设置和检索类得实例变量的值,这些方法称为访问方法和修改方法,亦可称为获取方法和设置方法(java中称为set和get方法)。但是@property声明可以让你告别枯燥乏味的访问方法和修改方法。我们在接口文件中键入的@property声明与实现文件(@synthesize)中的另一个声明相结合,就可以通知编译器在编译时创建获取方法和设置方法。