oc

iOS开发-OC、C、C++ 混编

随声附和 提交于 2020-01-14 14:33:08
OC里面的有三大类文件.m/.h(OC),.c/.h (C),.cpp/.hpp(C++)。 一、在OC中调用C或者C++ 如果是.m文件,可以用OC和C的代码; 如果是.mm文件,可以用OC和C和C++的代码; .m 和.mm 的区别是告诉编译器在编译时要加的一些参数。.mm也可以命名成.m,手动加编译参数。 二、在C++中调用OC PIMPL (Private Implementation, 私有实现) 不要在C++中依赖ARC,最好自己手动管理。 遇到的问题: 1,尝试在同一个文件中调用oc、c、c++,ld: symbol(s) not found for architecture x86_64。 问题出现的原因和OC无关,在c++中引用c的头文件,需要用extern "C"{}把代码包括起来。详细原因见下: http://stackoverflow.com/questions/9334650/linker-error-calling-c-function-from-objective-c 2,在c++中调用OC时遇到了问题,在.cpp文件中调用OC的类,在Foundation处报错。 问题出现在.cpp文件用的是纯粹的c++编译。 解决方案:把实现放在.mm。 learnCplus(1, 2); //在OC中使用c learnCplusplus(1, 2); /

iOS之 C++与oc混编

China☆狼群 提交于 2020-01-14 04:02:12
声明 :本文只是随笔,自己做个笔记方便以后查阅如要转载,注明出处。谢谢! 2016年第一篇随笔!!! 由于最近要搞一个项目用到c++的一些api所以要混编,于是就记录下这个过程中的一些细节上的东西! Objective-C++ 是 Objective-C 和 C++ 的混合物,让你可以在 Objective-C 类中使用 C++ 对象。clang 编译器会把所有后缀名为 .mm 的文件都当做是 Objective-C++。一般来说,它会如你所期望的那样运行,但还是有一些使用 Objective-C++ 的注意事项。内存管理是你最应该格外注意的点,因为 ARC 只对 Objective-C 对象有效。当你使用一个 C++ 对象作为类属性的时候,其唯一有效的属性就是 assign 。因此,你的 dealloc 函数应确保 C++ 对象被正确地释放了。 第二重要的点就是,如果你在 Objective-C++ 头文件中引入了 C++ 头文件,当你在工程中使用该 Objective-C++ 文件的时候就泄露了 C++ 的依赖。任何引入你的 Objective-C++ 类的 Objective-C 类也会引入该 C++ 类,因此该 Objective-C 文件也要被声明为 Objective-C++ 的文件。这会像森林大火一样在工程中迅速蔓延。所以,应该把你引入 C++ 文件的地方都用

OC中NSDictionary(字典)、NSMutableDictionary(可变字典)、NSSet(集合)、NSMutableSet(可变集合)得常用方法

a 夏天 提交于 2020-01-11 21:05:04
字典用于保存具有映射关系数据的集合 一个key—value对认为是一个条目(entry),字典是存储key—value对的容器 与数组不同,字典靠key存取元素 key不能重复,value必须是对象 键值对在字典中是无序存储的 字典分:不可变字典(NSDictionary)和可变字典(NSMutableDictionary) 不可变字典一旦创建,键值对就不可更改,不可添加,不可删除,仅能读取key或者value 常用方法有: 1、创建字典对象 2、获取所有key值,获取所有value值 3、通过key值查询value 1、常见字典的常用方法 在创建字典对象时需要赋值键值对,但是顺序为:值,键,(值在前键在后的形式) NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"Duke",@"name",@33,@"age",@"男",@"gender", nil]; NSLog(@"%@",dic1); NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"Duke",@"name",@33,@"age",@"男",@"gender", nil]; NSLog(@"%@",dic2); NSArray *keys = @[@

OC文件操作2

纵然是瞬间 提交于 2020-01-05 23:54:37
1、对文件本身的操作 NSManager 2、对文件内容的操作 NSHandle 文件句柄 1 NSFileHandle * fh = [NSFileHandle fileHandleForReadingAtPath:@""]; //以只读方式打开文件生成文件句柄 内存:内部存储器;硬盘:外部存储设备。 从硬盘到内存(从文件到内存)叫做读,从内存到文件(硬盘)叫做写。 1 //读取文件内容的两种方式 2 NSData * data = [fh readDataOfLength:3]; 3 //继续上面3个字节后,继续读取5个字节 4 data = [fh readDataOfLength:5]; 如果文件内容不是特别的多,可以用下面的方法直接读取全部内容 1 //如果文件内容不是特别的多,可以用下面的方法直接读取全部内容 2 data = [fh readDataToEndOfFile]; 3 NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 除了上面读的方法,还有写的方法。 1 NSFileHandle * fh = [NSFileHandle fileHandleForWritingAtPath:@""]; //以只写方式打开文件生成句柄 2 [fh

OC文件管理NSFileManager与文件读写NSFileHandle

喜你入骨 提交于 2020-01-05 23:54:22
/* 文件管理与读写操作 */ /* NSFileManager 类文件管理器常用操作 */ // 首先要创建一个文件管理器: NSFileManager * fm =[NSFileManager defaultManager ]; // 创建管理对象 浅度遍历目录,当前目录 - contentsOfDirectoryAtPath:error: 深度遍历目录 - subpathsOfDirectoryAtPath:error: 创建目录 - createDirectoryAtPath:withIntermediateDirectories:attributes:error: 创建文件 – createFileAtPath:contents:attributes: 删除文件(包括目录) - removeItemAtPath:error: 目录/文件拷贝 - (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error 移动/重命名文件或者目录 – moveItemAtPath:toPath:error: 测试文件是否存在 - (BOOL)fileExistsAtPath:(NSString *)path 获取文件信息 ( 属性和权限 ) -

iOS开发-OC、C、C++ 混编

。_饼干妹妹 提交于 2020-01-04 21:39:02
OC里面的有三大类文件.m/.h(OC),.c/.h (C),.cpp/.hpp(C++)。 一、在OC中调用C或者C++ 如果是.m文件,可以用OC和C的代码; 如果是.mm文件,可以用OC和C和C++的代码; .m 和.mm 的区别是告诉编译器在编译时要加的一些参数。.mm也可以命名成.m,手动加编译参数。 二、在C++中调用OC PIMPL (Private Implementation, 私有实现) 不要在C++中依赖ARC,最好自己手动管理。 遇到的问题: 1,尝试在同一个文件中调用oc、c、c++,ld: symbol(s) not found for architecture x86_64。 问题出现的原因和OC无关,在c++中引用c的头文件,需要用extern "C"{}把代码包括起来。详细原因见下: http://stackoverflow.com/questions/9334650/linker-error-calling-c-function-from-objective-c 2,在c++中调用OC时遇到了问题,在.cpp文件中调用OC的类,在Foundation处报错。 问题出现在.cpp文件用的是纯粹的c++编译。 解决方案:把实现放在.mm。 learnCplus(1, 2); //在OC中使用c learnCplusplus(1, 2); /

「OC」@property @synthesize和id

你说的曾经没有我的故事 提交于 2020-01-02 00:43:04
一、@property @synthesize关键字   这两个关键字是编译器特性,让Xcode可以自动生成getter和setter。 (一)@property 关键字   @property 关键字可以自动生成某个成员变量的setter和getter的声明   如:@property int age;   编译时遇到这一行,则自动扩展成下面两句:   - (void)setAge:(int)age;   - (int)age; (二)@synthesize关键字   @synthesize关键字帮助生成成员变量的setter和getter方法的实现。   如:@synthesize age=_age;   相当于下面的代码:   - (void)setAge:(int)age   {     _age=age;   }   - (int)age   {     return _age;   } (三)关键字的使用和注意   类的声明部分:      类的实现部分:      测试程序:      新版本中:   类的声明部分:      类的实现部分:      测试程序:      (1)在老式的代码中,@property只能写在@interface @end中,@synthesize只能写在@implementation @end中,自从xcode 4.4后,

OC开发系列-@property和@synthesize

有些话、适合烂在心里 提交于 2020-01-02 00:42:42
property和synthesize 创建一个Person类。提供成员属性的_age和_height的setter和getter方法。 #import <Foundation/Foundation.h> @interface Person : NSObject { int _age; int _height; } - (void)setAge:(int)age; - (int)age; @end #import "Person.h" @implementation Person - (void)setAge:(int)age { _age = age; } - (int)age { return _age; } @end 开发中考虑封装性将成员属性通过提供setter与getter结构供外界访问。但是这些setter跟getter代码没有任何技术含量。于是苹果提供关键字 property 和 synthesize 关键字利用编译器特性将我们自动生成setter跟getter方法。 @property int age; // - (void)setAge:(int)age; // - (int)age; @synthesize age; /* - (void)setAge:(int)age { } - (int)age { } */ @synthesize

「OC」@property @synthesize和id

会有一股神秘感。 提交于 2020-01-02 00:42:31
一、@property @synthesize关键字   这两个关键字是编译器特性,让Xcode可以自动生成getter和setter。 (一)@property 关键字   @property 关键字可以自动生成某个成员变量的setter和getter的声明   如:@property int age;   编译时遇到这一行,则自动扩展成下面两句:   - (void)setAge:(int)age;   - (int)age; (二)@synthesize关键字   @synthesize关键字帮助生成成员变量的setter和getter方法的实现。   如:@synthesize age=_age;   相当于下面的代码:   - (void)setAge:(int)age   {     _age=age;   }   - (int)age   {     return _age;   } (三)关键字的使用和注意   类的声明部分:      类的实现部分:      测试程序:      新版本中:   类的声明部分:      类的实现部分:      测试程序:      (1)在老式的代码中,@property只能写在@interface @end中,@synthesize只能写在@implementation @end中,自从xcode 4.4后,

OC语言@property @synthesize和id

左心房为你撑大大i 提交于 2020-01-02 00:42:13
文顶顶 OC语言@property @synthesize和id OC语言@property @synthesize和id 一、@property @synthesize关键字 注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明和实现。 (一)@property 关键字 @property 关键字可以自动生成某个成员变量的setter和getter方法的声明 @property int age; 编译时遇到这一行,则自动扩展成下面两句: - (void)setAge:(int)age; - (int)age; (二)@synthesize关键字 @synthesize关键字帮助生成成员变量的setter和getter方法的实现。 语法:@synthesize age=_age; 相当于下面的代码: - (void)setAge:(int)age { _age=age; } - (int)age { Return _age; } (三)关键字的使用和使用注意 类的声明部分: 类的实现部分: 测试程序: 新版本中: 类的声明部分: 类的实现部分: 测试程序: (1)在老式的代码中,@property只能写在@interface @end中,@synthesize只能写在@implementation @end中,自从xcode 4.4后,