Ios Objective-C函数参数和静态变量同名
我对objective-c中静态变量的命名重写有一些疑问 我的.h文件是:Ios Objective-C函数参数和静态变量同名,ios,objective-c,Ios,Objective C,我对objective-c中静态变量的命名重写有一些疑问 我的.h文件是: #import <Foundation/Foundation.h> @interface FetchClass : NSObject + (void)initWithNSManagedObjectContext:(NSManagedObjectContext *) managedObjectContext; @end 然而,我得到了错误 “在FetchTasks类型的对象上找不到属性manag
#import <Foundation/Foundation.h>
@interface FetchClass : NSObject
+ (void)initWithNSManagedObjectContext:(NSManagedObjectContext *) managedObjectContext;
@end
然而,我得到了错误
“在FetchTasks类型的对象上找不到属性managedObjectContext”
因此,问题是,函数参数managedObjectContext
当然会覆盖同名的静态变量。这就是为什么我必须通过Class.staticVariableName获取静态变量。但是这次我得到了上面提到的错误
但是,如果我将静态变量名称更改为其他名称,例如:
static NSManagedObjectContext * managedObjectContextOtherName;
@implementation FetchClass
+ (void)initWithNSManagedObjectContext: (NSManagedObjectContext *) managedObjectContext{
managedObjectContextOtherName = managedObjectContext;
}
它工作得很好。我的问题是,如果这些变量(静态变量和函数参数变量)具有相同的名称,如何使用它们 方法参数和实例变量应具有不同的名称。当它们相同时,编译器应该警告您它使用了method变量 静态变量,如您的
managedObjectContext
,与Objective-C提供的类变量最接近,但它不是同一件事,这就是为什么您在尝试时会出错的原因-您无法通过使用类名限定引用来解析引用
在(Objective-)C中,在任何函数/方法之外声明的静态变量都具有全局生存期和文件作用域,即该变量始终存在,但仅在与其声明相同的源文件中可见。当引用静态变量时,没有“文件范围”限定符可用于解决歧义/隐藏问题,内部范围中任何同名变量都将隐藏静态变量
在您的情况下,您可以使用:
+ (void)initWithNSManagedObjectContext:(NSManagedObjectContext *)_managedObjectContext
{
managedObjectContext = _managedObjectContext;
}
(无需在接口中更改
initWithNSManagedObjectContext:
的声明-参数名称不需要匹配-因此,如果您不希望,您的“public”声明不需要在名称中使用u。)您不需要。如果您想同时访问静态变量和局部变量,请为它们指定唯一的名称。这就是在局部变量前面加下划线\uu
的约定要点,如果您使用@properties
,就会自动这样做。您认为类方法如何访问任何实例方法或属性?你可能错过了学校的几个重要课程。
+ (void)initWithNSManagedObjectContext:(NSManagedObjectContext *)_managedObjectContext
{
managedObjectContext = _managedObjectContext;
}