当我extern在方法或变量声明之前使用单词时,我是否将其设置为全局,因此在整个项目中可读/可写/可用?
如果我在关键字之前使用extern,那么我的项目的一部分仍然无法访问它吗?例如,仅由子类...例如当我使用"protected"时.
extern是一个C关键字,对吗?Objective-C中是否有等价物?我实际上不明白为什么他们在Objective-C项目中使用C关键字.
谢谢
我已经看到了两种创建全局变量的方法,有什么区别,你什么时候使用它们?
//.h
extern NSString * const MyConstant;
//.m
NSString * const MyConstant = @"MyConstant";
Run Code Online (Sandbox Code Playgroud)
和
//.h
extern NSString *MyConstant;
//.m
NSString *MyConstant = @"MyConstant";
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一些可以从iPhone应用程序中的Objective-C和C++代码调用的实用程序函数.我有第三方C++类,无法编译为ObjectiveC++(.mm).我有一个头文件声明我的函数,然后是.c文件定义它们.我已检查拼写错误三倍,但由于某种原因,我的链接器无法找到任何函数的定义.
这是C帮助函数的标题:
#ifndef FILE_LOADER_H
#define FILE_LOADER_H
#if __cplusplus
extern "C" {
#endif
void * loadDataFromFile(const char * szFilename, bool bDocument);
void * loadImageFromFile(const char * szFilename, bool bDocument);
void loadMeshFromFile(const char *szFilename, void* pMesh);
#if __cplusplus
} // Extern C
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
这是.c文件:
#include "FileLoader.h"
#include <objc/objc.h>
#include <objc/message.h>
#include <Foundation/Foundation.h>
void * loadDataFromFile(const char * szFilename, bool bDocument)
{
Class loaderClass = NSClassFromString(@"Loader");
void * pReturnVal = objc_msgSend(loaderClass, NSSelectorFromString(@"loadDataFromFile:document"), szFilename, bDocument);
return pReturnVal;
//return [Loader loadDataFromFile:szFilename document:bDocument];
}
void …Run Code Online (Sandbox Code Playgroud) 我收到这些Apple Mach-O Linker错误,我不知道如何阅读这些内容.在我的项目中导入"CLCredentialHeader.h"和"CLCredentialHeader.m"后出现这些错误.
Undefined symbols for architecture armv7:
"_OBJC_CLASS_$_SFHFKeychainUtils", referenced from:
objc-class-ref in CLCredentialHandler.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)