繁体   English   中英

Objective-C 中单例方法的问题

[英]problem with singleton's methods in Objective-C

我正在做 singleton 和 A 不能在上面使用方法...... arguments 的类型显然不正确......并且有很多错误(错误)......

错误在注释中(在代码中)

在国外的Class中:

[ [MySingleton sharedMySingleton] setAuth:@"test"]; //incompatible type for argument 1 of setAuth
NSLog([ [MySingleton sharedMySingleton] getAuth]); //Incompatible type for argument 1 os NSLOG

在我的单身课程中:

#import <Foundation/Foundation.h>


@interface MySingleton : NSObject {

    NSString *myToken;

}

+(MySingleton*)sharedMySingleton;

-(void)setAuth:(NSString) token;
-(NSString)getAuth;

@property (nonatomic, retain) NSString *myToken;

@end

... 和...

    #import "MySingleton.h"

@implementation MySingleton

static MySingleton* _sharedMySingleton = nil;
@synthesize myToken;

+(MySingleton*)sharedMySingleton
{
    @synchronized([MySingleton class])
    {
        if (!_sharedMySingleton)
            [[self alloc] init];

        return _sharedMySingleton;
    }

    return nil;
}

+(id)alloc
{
    @synchronized([MySingleton class])
    {
        NSAssert(_sharedMySingleton == nil, @"Attempted to allocate a second instance of a singleton.");
        _sharedMySingleton = [super alloc];
        return _sharedMySingleton;
    }

    return nil;
}

-(id)init {
    self = [super init];
    if (self != nil) {
        // initialize stuff here
    }

    return self;
}

-(void)setAuth:(NSString) token { // Can not use as abject as parameter to a method
    myToken=token;// incomatible types in assignment
}

-(NSString)getAuth { // can not use an object as parameter to a method
    return myToken;// incomatible types in return
} // control reaches end of non-void function


@end
-(void)setAuth:(NSString) token;
-(NSString)getAuth;

应该

-(void)setAuth:(NSString*) token;
//                      ^ note a pointer is needed
-(NSString*)getAuth;
//        ^ note a pointer is needed

此外,您的分配是疯狂的。 你实际上调用了[super alloc] ,它会给你一个错误类型的 object 。 查看如何在 iPhone 的 objective-c 中实现 singleton 以获得更好的方法来做单例。

您的 header 文件缺少NSString类型的* 例如,它应该是:

-(void)setAuth:(NSString *) token;

到处用NSString*替换NSString

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM