开发者

Problem with value of SIngleton in iPhone app

Hi have a problem with singleton Class in iPhone app. I have create a simple class for visualization of NSString value. My problem is generate when i try to stamp a NSString in a textVIew. I call my methods and the value of string in Singleton class is (invalid) (i have tested it with debug). Can you help me with the code solution.

my code:

#import "UntitledViewController.h"
#import "SingletonController.h"

@implementation UntitledViewController

@synthesize resetTextEvent;
@synthesize buttonSavePosition;


-(IBAction)stamp{

    textEvent.text = [sharedController name];

}


- (void)viewDidLoad {
    [super viewDidLoad];

    sharedController =  [SingletonController sharedSingletonController];

}


- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


- (void)dealloc {
    [super dealloc];
}

@end




#import "SingletonController.h"


@implementation SingletonController

@synthesize name;

static SingletonController *sharedController = nil;

+(SingletonController*)sharedSingletonController{

    if(sharedController == nil){
        sharedController = [[super allocWithZone:NULL] init];
        }

    return sharedController;
}


+ (id)allocWithZone:(NSZone *)zone开发者_C百科
{
    return [[self sharedSingletonController] retain];
}

- (id)copyWithZone:(NSZone *)zone
{
    return self;
}

- (id)retain
{
    return self;
}

- (NSUInteger)retainCount
{
    return NSUIntegerMax;  //denotes an object that cannot be released
}

- (void)release
{
    //do nothing
}

- (id)autorelease
{
    return self;
}

-(id)init{
    self = [super init];
    if (self != nil) {
        name = [NSString stringWithFormat:@"hello"];
        }
    return self;
}


-(void) dealloc {
    [super dealloc];
}
@end


This line:

name = [NSString stringWithFormat:@"hello"];

is problematic. name refers to an instance variable, not your property. So what's happening is your string is being assigned to name, but it's an autoreleased object. So, at some point in the future, name is released automatically and refers to deallocated memory.

If you've specified the name property as either retain or copy, then either of the following lines will property retain the object:

self.name = [NSString stringWithFormat:@"hello"];
name = [[NSString stringWithFormat:@"hello"] retain];
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜