在编译oc中protocol时出现的错误

Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 1

解决方法:在Build Setting  搜索框中搜索pch,找到了Prefix Header,把后面的Debug中和release中的所有信息都删除就可以解决。

时间: 2024-11-06 20:00:45

在编译oc中protocol时出现的错误的相关文章

关于oc中expression is not assignable错误原因

在oc中当我们直接对self.view.frame.size.height = 100;进行赋值时,便会出现这个错误,这个错误的原因是在于: self.view.frame是Objective-C语法的点语法,而frame属性是一个cgrect结构,frame.size.height是c语言的语法,由于oc只是c语言的扩展,因此上面这句话转化为c语言的形式调转就会变为:getframe().size.height = 100f; 在c语言中,函数的返回值是一个R-Value,是不能给他直接赋值的

OC中protocol、category和继承的区别

利用继承,多态是一个很好的保持"对扩展开放.对更改封闭"(OCP)的办法,也是最常见的一种方法.Objective C还支持另外两种语法来支持OCP:Protocol和Category.Protocol只能定义一套接口,而不能提供实现,变相的也是一种Abstract class的实现方式(oc 语法上本身不支持抽象基类).Category可以为类提供额外的接口和实现.那么到底三者(继承, Protocol,Category)在使用上到底有什么本质的区别呢?在我看来,protocol的作

rgbdslam_v2编译过程中引起的needed by错误

Ubuntu16.04,ROS kinectic 报错信息为" make[2]: *** No rule to make target '/home/william/slam/g2o/lib/libg2o_csparse_extension.so', needed by '/home/william/catkin_ws/devel/lib/rgbdslam/rgbdslam'. Stop.CMakeFiles/Makefile2:5881: recipe for target 'rgbdslam

ios--->OC中Protocol理解及在代理模式中的使用

OC中Protocol理解及在代理模式中的使用 Protocol基本概念 Protocol翻译过来, 叫做"协议",其作用就是用来声明一些方法: Protocol(协议)的作用 定义一套公用的接口(Public) @required:必须实现的方法,默认在@protocol里的方法都要求实现. @optional:可选实现的方法(可以全部都不实现) 委托代理(Delegate)传值 它本身是一个设计模式,它的意思是委托别人去做某事. 比如:两个类之间的传值,类A调用类B的方法,类B在执

OC中的@interface和java中的区别以及 @implementation @protocol

java 在java中的interface是‘接口’的意思,而java的类声明用class,即接口用interface声明,类是用class声明,是两个独立的部分. 只有在类声明要实现某个接口时,他们两者才建立了关系,例如: [html] view plaincopyprint? interface AI{ void print(); }; class AC{ }; 这时候,AI和AC是独立存在,AC不会因为没有和AI建立关系而编译错误,将AC做以下修改后,AI才和AC建立了关系,AC必须实现A

OC中 self.view.frame.size.height = 100; 不能通过编译的原因

在OC中,当需要修改一个view的尺寸时,通常是通过先将 self.view.fram赋值给一个临时变量,然后修改临时变量,最后将临时变量赋值给 self.view.frame.代码如下: 1 // 1. 用一个临时变量保存返回值. 2 CGRect temp = self.view.frame; 3 4 // 2. 给这个变量赋值.因为变量都是L-Value,可以被赋值 5 temp.size.height = 100f; 6 7 // 3. 修改frame的值 8 self.view.fra

OC中NSString和block的属性时copy,而不用retain

OC中NSString和block的属性时copy,而不用retain   而容器类使用retain NSString 为什么要使用copy,而不是retain 1.首先如果使用retain,只是引用计数+1,并没有生成新的对象,所以效率好 2.但是使用copy安全.因为NSString为NSMutableString 的基类,如果将NSMutableString 以retain的形式赋值给NSString后,后续修改NSMutableString会导致NSString内容的变化,这通常不是我们

OC中没有实现NSCopying技术时的深复制技术

最近看书看到一种新的实现深复制对象的技术,使用Foundation的归档技术,下面是代码: ? 1 2 NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dataArray]; NSMutableArray *dataArray2 = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 上述即实现了将dataArray深复制给dataArray2,另外一种简便写法是: ? 1 da

OC中协议Protocol的小结

//协议的基础语法 //遵从协议的类,可以声明出遵从协议的对象 Dog * dog = [[Dog alloc] init]; //普通id指针能指向任何对象,带协议的id只能指向遵从协议的类的对象 //Dog类遵从了MyProtocol协议,实现了协议中的方法 id <MyProtocol> obj = dog; //obj可以使用协议中定义的方法bark [obj bark]; // // main.m // 协议1-基础语法 // // Created by Macro on 14-12