我必須在超過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方法存儲的服務器響應 –