OC第一个程序的解释

OC第一个程序的解释

这个大家可以当做复习资料吧,毕竟没有针对零基础, 如果你有特别好的C语言功底,并且熟悉了面向对象的思想,学起来OC肯定是很容易的!

  1. //C和OC语言的区别和联系:  
  2. /* 
  3.  区别: 
  4.  1、C语言的源文件后缀是.c  而OC语言的源文件后缀是.m 
  5.  2、C语言是面向过程的语言 而OC语言是面向对象的语言 
  6.  联系: 
  7.  OC语言是基于C语言的 所以完全兼容C语言的语法 
  8.  OC语言只是在C语言的基础上加上了最小的一层面向对象的语法  剔除复杂的面向对象语法 留下的都是精华 所以OC语言较C++语言的学习 容易很多 
  9.  */  
  10. #import <Foundation/Foundation.h>  
  11. //这么描述的意思是导入了Foundation框架中的Foundation.h这个声明文件  
  12. /* 
  13.  Foundation 是OC里最重要的一个框架(基础类库),里面封装了大量的类和方法以及结构体和函数、枚举 
  14.   
  15.  因为面向对象语言里的框架大都非常的大,所以一般框架都会把框架内所有的头文件放到一个头文件里,这个头文件称之为主头文件,这样在代码中把这个主头文件导入的时候,就相当于把框架内的所有头文件都导入了 
  16.   
  17.  #import "" 导入OC的头文件,导入系统自带的头文件用<>,导入自定义的头文件用"",编译器会自动判断该头文件是否重复包含 如果重复包含 多次引入 就不会执行 可以避免头文件的交叉编译 
  18.   
  19.  #include "" 导入的是C的头文件  头文件可能会出现交叉编译 所以需要在预处理阶段手动添加条件编译语句 #ifndef #define #endif 
  20.  */  
  21. int main(int argc, const charchar * argv[]) {  
  22.     //oc的main函数同样是入口函数,有且仅有一个main函数  
  23.     @autoreleasepool {//OC的关键字以@开头 防止跟C语言、C++关键字冲突(字符串也是@开头)  
  24.         /* 
  25.          自动释放池 释放对象内存  只能在一定程度上去帮助我们管理对象的释放,本身自动释放池也是一个对象,所以这个对象再使用完成后也是需要释放的 
  26.          首先,我们要把我们需要自动释放池管理的对象入池,当自动释放池对象释放的时候,会对所有池内的对象进行释放 
  27.          */  
  28.           
  29.         NSLog(@"Hello, %@",@"my readers!");//NSLog是OC中的打印输出函数,同样支持格式输出。  
  30.         printf("Hello,%s\n","my readers!");  
  31.         /* 
  32.          @"Hello, my readers!";  字符串对象 是有属性和行为的 
  33.          "Hello, my readers!";   C字符串  是一个基本数据类型 没有属性没有行为 
  34.          %s 打印的是C的字符串 
  35.          %@ 打印的时OC的字符串对象 
  36.           
  37.          NS 是NEXTSTEP的缩写(OC系统函数、系统类的前缀,所以我们设计类应该尽量避免使用NS打头) 
  38.          */  
  39.         /* 
  40.          NSLog和printf的区别 
  41.          1、NSLog会为打印输出的内容添加时间戳 
  42.          2、NSLog会自动换行 而printf打印输出语句必须添加转义字符\n进行换行 
  43.          */  
  44.           
  45.     }// 这个括号的位置,就是自动释放池销毁的地方  
  46.     return 0;  
  47. }  


怎么样,对OC有个大概的认识了吧,之后会介绍更多的内容,方便大家学习。

### 使用Objective-C实现USB传输编程 对于USB传输编程,在Objective-C环境中通常依赖于苹果提供的IOKit框架来访问底层硬件资源。此框架允许开发者创建驱动程序并管理连接至系统的各种设备,包括USB设备。 为了初始化与特定USB设备之间的通信,需先获取该设备的信息,并建立相应的连接对象。下面是一个简单的例子展示如何枚举已连接的USB设备: ```objective-c #import <Foundation/Foundation.h> #import <IOKit/usb/IOUSBLib.h> // 定义回调函数以处理找到的匹配项 static void deviceMatchingCallback(void *refCon, io_iterator_t iterator) { io_service_t service; while ((service = IOIteratorNext(iterator))) { CFMutableDictionaryRef propertyMatch; // 获取属性字典 if (KERN_SUCCESS != IORegistryEntryCreateCFProperties(service, &propertyMatch, kCFAllocatorDefault, 0)) { continue; // 如果无法读取则跳过当前服务 } NSLog(@"Found a matching USB Device"); // 打印一些基本信息作为示范 const char* productName = NULL; if (propertyMatch && CFGetTypeID(propertyMatch) == CFDictionaryGetTypeID()) { CFStringRef nameStr = (CFStringRef)CFDictionaryGetValue( propertyMatch, CFSTR(kUSBProductString)); if(nameStr){ ProductName = CFStringGetCStringPtr(nameStr, kCFStringEncodingUTF8); NSLog(@"Device Name:%s",productName); } } // 清理工作... if (propertyMatch) { CFRelease(propertyMatch); } IOObjectRelease(service); } } int main(int argc, const char * argv[]) { @autoreleasepool { NSBundle *mainBundle = [NSBundle mainBundle]; NSString *pathToInfoPlist = [mainBundle pathForResource:@"Info" ofType:@"plist"]; NSDictionary *infoDict = [[NSDictionary alloc] initWithContentsOfFile:pathToInfoPlist]; // 创建一个迭代器用来遍历所有符合条件的服务实例 mach_port_t masterPort; kern_return_t kr = IOMasterPort(MACH_PORT_NULL, &masterPort); io_iterator_t iter; CFMutableDictionaryRef classesToMatch = IOServiceMatching("IOUSBHostInterface"); kr = IOServiceGetMatchingServices(masterPort, classesToMatch, &iter); if (kr == KERN_SUCCESS) { deviceMatchingCallback(NULL, iter); IOObjectRelease(iter); } else { NSLog(@"Failed to get services."); } } return 0; } ``` 上述代码展示了怎样利用`IOKit`库去发现系统中存在的USB主机接口,并打印出它们的产品名称[^1]。 一旦找到了目标设备之后,则可以进一步尝试打开它并与之交换数据包。这涉及到更复杂的操作比如设置配置描述符、声明端点等细节问题。由于这些过程较为繁琐且容易出错,建议参考官方文档或第三方开源项目中的具体实现方式获得指导。 #### 注意事项 - 上述代码片段仅适用于macOS环境下的开发。 - 实际应用时可能还需要考虑权限管理和错误恢复机制等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值