gpt4 book ai didi

ios - 只使用实例变量而不使用属性可以吗

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:03:40 26 4
gpt4 key购买 nike

我有一个实例变量 apiEndpoint,我不想从除 init 之外的任何地方设置它,我只希望它对类私有(private)。如果我使用实例变量而不是属性可以吗?

ApiWrapper.h

#import <Foundation/Foundation.h>

@interface ApiWrapper : NSObject
{
NSString *apiEndpoint;
}

- (void) initWithApiEndpoint:(NSString *) newApiEndpoint;


+ (NSString *)getApiEndpoint:(NSString *) storeUrl;
+ (NSString *)getApiEndpointWithoutIndexDotPHP:(NSString *) storeUrl;
@end

ApiWrapper.m

#import "ApiWrapper.h"


@implementation ApiWrapper
- (void) initWithApiEndpoint:(NSString *) newApiEndpoint;
{
apiEndpoint = newApiEndpoint;
}
+ (NSString *)getApiEndpoint:(NSString *) storeUrl
{
if (![storeUrl hasPrefix:@"http://"] && ![storeUrl hasPrefix:@"https://"])
{
NSLog(@"%@ missing http", storeUrl);
}

return nil;
}

+ (NSString *)getApiEndpointWithoutIndexDotPHP:(NSString *) storeUrl
{

}

@end

最佳答案

是的,可以使用 ivars。然而,属性的妙处在于它们会为您创建 getter 和 setter,这不仅仅是读取或写入变量值,还可以包括对象保留管理、线程安全读写等内容。

有一种方法可以通过在类的 .m 文件的匿名类扩展中声明它来创建“私有(private)属性”。请注意,您仍然必须在 init 和 dealloc 方法中使用支持属性的 ivar。您的代码看起来像这样:

#import "ApiWrapper.h"

@interface ApiWrapper ()
@property (strong,nonatomic) NSString* apiEndpoint;

@end

@implementation ApiWrapper

- (id) initWithApiEndpoint:(NSString *) newApiEndpoint;
{
self = [super init]
if ( self ) {
_apiEndpoint = newApiEndpoint;
}

return self;
}

关于ios - 只使用实例变量而不使用属性可以吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14554899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com