我必须在超过5个视图控制器中显示来自NSUserDefaults
的用户详细信息。所以我创建了一个NSObject
子类,它将在调用第一个视图控制器viewDidLoad
时从服务器加载用户详细信息。Objective C属性内存问题
这是我的第一个视图控制器的viewDidLoad
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// Getting the Current User Details
CurrentUserDetails *userDetails = [[CurrentUserDetails alloc]init];
[userDetails initializeTheCurrentUserData];
//CurrentUserDetails is my NSObject class
}
而且
#import <Foundation/Foundation.h>
@interface CurrentUserDetails : NSObject
@property(strong,nonatomic) NSString *memberName;
@property(strong,nonatomic) NSString *designation;
@property(strong,nonatomic) NSString *memberType;
@property(strong,nonatomic) NSString *entreprenuer;
@property(strong,nonatomic) NSDate *expiryDate;
@property(strong,nonatomic) NSData *imageData;
- (void) initializeTheCurrentUserData;
@end
和实施
@implementation CurrentUserDetails
- (void) initializeTheCurrentUserData{
NSData *data = [[NSUserDefaults standardUserDefaults] valueForKey:@"userDictionary"];
NSDictionary *retrievedDictionary = [NSKeyedUnarchiver unarchiveObjectWithData:data];
self.memberName = [retrievedDictionary valueForKey:@"Name"];
self.designation = [retrievedDictionary valueForKey:@"Designation"];
self.memberType = [[retrievedDictionary valueForKey:@"Member_type"] stringValue];
self.expiryDate = [retrievedDictionary valueForKey:@"Expiry"];
self.kanaraEntreprenuer = [retrievedDictionary valueForKey:@"CityName"];
NSString *imageUrl = [retrievedDictionary valueForKey:@"Member_image"];
self.imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",[GlobalVariables getBaseURLForMemberImage],imageUrl]]];
}
当IAM试图从这样的其他类的细节..
CurrentUserDetails *userDetails = [[CurrentUserDetails alloc]init];
memberName = userDetails.memberName;
designation = userDetails.designation;
memberType = userDetails.memberType;
dateFromServer = userDetails.expiryDate;
entreprenuer = userDetails.entreprenuer;
imageDataFromServer = userDetails.imageData;
我得到零值。
但是,如果每次调用initializeTheCurrentUserData方法,我都会得到确切的值。我虽然一旦一个属性被分配一个值,我们可以使用整个程序的属性。我越来越困惑..任何人都可以告诉我这个????。每当我想使用这些值时,是否需要每次调用initializeTheCurrentUserData?
无需再次初始化您可以使用setter和getter方法存储的服务器响应 –