object-c类方法

合集下载

第十一章、objective-c复制对象

第十一章、objective-c复制对象
Leabharlann 浅复制与深复制(cont.)
// make a copy, then change one of the strings dataArray2 = [dataArraymutableCopy]; //生成全新的数组 //生成全新的数组 mStr = [dataArrayobjectAtIndex: 0]; //修改第一个元素的值变为 修改第一个元素的值变为oneOne 修改第一个元素的值变为 [mStrappendString: @"ONE"]; NSLog (@"dataArray: "); for ( NSString *elem in dataArray ) NSLog (@"%@", elem); //oneOne two three NSLog (@"dataArray2: "); for ( NSString *elem in dataArray2 ) NSLog (@" %@", elem); //oneOne two three [dataArray2 release]; //必须由你负责 //必须由你负责release 必须由你负责 [pool drain]; return 0; }
实现<NSCopying>协议(cont.)
#import "Fraction.h" #import <Foundation/NSAutoreleasePool.h> int main (intargc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePoolalloc] init]; Fraction *f1 = [[Fraction alloc] init]; Fraction *f2; [f1 setTo: 2 over: 5]; f2 = [f1 copy]; [f2 setTo: 1 over: 3]; [f1 print]; //2/5 [f2 print]; //1/3 [f1 release]; [f2 release]; [pool drain]; return 0; }

Objective-C中数据类型 id、nil、Nil、SEL

Objective-C中数据类型 id、nil、Nil、SEL

Objective-C中数据类型id、nil、Nil、SEL蓝鸥科技的付老师您整理了技术资料,希望对您有帮助。

Objective-C中有一些很有趣的数据类型经常会被错误地理解。

他们中的大多数都可以在/usr/include/objc/objc.h或者这个目录中的其他头文件中找到。

下面是从objc.h中摘录的一段,定义了一些数据类型:// objc.h∙typedef struct objc_class *Class;∙typedef struct objc_object {∙ Class isa;∙} *id;∙∙typedef struct objc_selector *SEL;∙typedef id (*IMP)(id, SEL, …);∙typedef signed char BOOL;∙∙#define YES (BOOL)1∙#define NO (BOOL)0∙∙#ifndef Nil∙#define Nil 0∙#endif∙∙#ifndef nil∙#define nil 0∙#endifidid和void *并非完全一样。

在上面的代码中,id是指向struct objc_object的一个指针,这个意思基本上是说,id是一个指向任何一个继承了Object(或者NSObject)类的对象。

需要注意的是id是一个指针,所以你在使用id的时候不需要加星号。

比如id foo=nil定义了一个nil指针,这个指针指向NSObject的一个任意子类。

而id *foo=nil则定义了一个指针,这个指针指向另一个指针,被指向的这个指针指向NSObjec t的一个子类。

nilnil和C语言的NULL相同,在objc/objc.h中定义。

nil表示一个Objctive-C对象,这个对象的指针指向空(没有东西就是空)。

Nil首字母大写的Nil和nil有一点不一样,Nil定义一个指向空的类(是Class,而不是对象)。

oc 调用java后台方法 简书

oc 调用java后台方法 简书

oc 调用java后台方法简书以OC调用Java后台方法在移动应用开发中,有时我们需要在iOS应用中调用Java后台方法来实现一些功能。

本文将介绍如何使用OC(Objective-C)语言调用Java后台方法,并给出详细的步骤和示例代码。

我们需要在iOS应用中集成Java运行环境。

我们可以使用一些第三方库来完成这个任务,比如J2ObjC或RoboVM。

这些库可以帮助我们将Java代码转换为Objective-C代码,并在iOS应用中运行。

一、集成Java运行环境1. 在iOS项目中引入Java运行环境的第三方库。

以J2ObjC为例,我们可以使用CocoaPods来集成J2ObjC。

在Podfile中添加以下内容:```platform :ios, '9.0'target 'YourApp' dopod 'J2ObjC'end```然后执行`pod install`命令来安装J2ObjC。

2. 在iOS项目中创建一个Objective-C类,用于调用Java后台方法。

在这个类中,我们需要导入J2ObjC的头文件,并初始化Java 运行环境。

示例代码如下:```objective-c#import <J2ObjC/j2objc.h>@implementation JavaBridge+ (void)initializeJavaEnvironment {J2ObjCSetup();}+ (void)callJavaMethod {// 调用Java后台方法的代码}@end```二、调用Java后台方法在我们初始化了Java运行环境之后,就可以开始调用Java后台方法了。

下面是一个调用Java后台方法的示例:```objective-c+ (void)callJavaMethod {// 调用Java后台方法的代码NSString *javaClassName = @"com.example.MyJavaClass";NSString *javaMethodName = @"myJavaMethod";NSString *javaMethodSignature = @"(Ljava/lang/String;)V"; // 调用Java方法[J2OBJC_CALL_STATIC_VOID_METHOD(javaClassName, javaMethodName, javaMethodSignature)withNSString:@"Hello from Objective-C"];}```上述代码中,我们首先指定了要调用的Java类名、方法名和方法签名。

object-c中的BOOL类型

object-c中的BOOL类型

object-c中的BOOL类型object-c中的布尔类型⽐C语⾔中的bool类型早了10年,它具有YES和NO两种值。

在object-c中的布尔类型BOOL实际上是⼀种带符号的字符类型(signed char),它使⽤的空间是1byte,即8bit,其中YES定义为1,NO定义为0。

将⼤于1字节的整形数(⽐如short或者int)赋给BOOL变量,会被截断处理,只保留末尾的8个bit。

以下是object-c中使⽤BOOL类型的例⼦:#import <Foundation/Foundation.h>//⽐较两个int数是否⼀样BOOL areINTsDifferent(int thing1,int thing2){if(thing1==thing2)return NO;elsereturn YES;}//返回BOOL类型的数对应的NSString字符串NSString * boolString(BOOL yesNo){if(yesNo==YES)return@"YES";elsereturn@"NO";}int main(int argc, const char * argv[]) {BOOL areTheyDifferent ;areTheyDifferent= areINTsDifferent(6,6);//下⾯的%@表⽰NSString占位符NSLog(@"are %d and %d different? %@",6,6,boolString(areTheyDifferent));areTheyDifferent = areINTsDifferent(23,42);NSLog(@"are %d and %d different? %@",23,42,boolString(areTheyDifferent));return0;}输出的结果:2016-04-04 23:18:48.964 hello-obj[1267:84194] are 6 and 6 different? NO2016-04-04 23:18:48.965 hello-obj[1267:84194] are 23 and 42 different? YES。

objectc 尖括号的用法

objectc 尖括号的用法

在Objective-C中,尖括号(<>)通常用于表示类型,特别是在泛型编程中。

例如,你可以使用尖括号来声明一个返回特定类型的函数。

下面是一个例子:
```objective
-(NSArray<NSString*>*) getNames;
```
在这个例子中,`NSArray<NSString*>*` 是一个返回类型,表示这个函数将返回一个指向`NSArray`的指针,这个数组中包含的元素类型是`NSString*`。

尖括号还可以用来在类和结构体中声明属性或者成员变量。

例如:
```objective
@interface MyClass : NSObject
<NSCoding>
@property (nonatomic, strong) NSArray<MyObject*>* myObjects;
@end
```
在这个例子中,`NSArray<MyObject*>*` 是一个属性类型,表示这个属性是一个指向`NSArray`的指针,这个数组中包含的元素类型是`MyObject*`。

`<NSCoding>`是协议声明,表明这个类遵守`NSCoding`协议。

请注意,Objective-C 并不直接支持泛型,这里的尖括号只是为了表达类型信息。

Objective-C 在编译时并不进行类型检查或类型推断。

swift 调用oc copy方法

swift 调用oc copy方法

swift 调用oc copy方法
在Swift中调用Objective-C中的`copy`方法,可以使用桥接头
文件(Bridging Header)来导入Objective-C的代码。

首先,创建一个桥接头文件。

在项目中,创建一个名为
`YourProjectName-Bridging-Header.h`的文件。

在该文件中导入Objective-C的头文件或声明Objective-C的类。

然后,在项目的`Build Settings`中找到`Objective-C Bridging Header`设置项,并将其值设置为桥接头文件的路径。

接下来,在Swift文件中调用Objective-C的`copy`方法。

首先,确保你已经导入了Objective-C的头文件。

然后,使用Objective-C类的实例调用`copy`方法,将其转换为返回类型为
`Any`的可选值。

例如:
```swift
let objCObject = YourObjectiveCClass()
let copiedObject = objCObject.copy() as? Any
```
注意:如果Objective-C类的`copy`方法的返回类型是一个具有引用类型的对象,你可能需要将其转换为适当的类型。

Object-C语言类的扩展

Object-C语⾔类的扩展⼀、Category1、Category:也叫分类,类⽬。

是为没有源代码的类扩充功能。

扩充的功能会成为原有类的⼀部分,可以通过原有类或者原有的对象直接调⽤,并且可继承。

2、注意:1)该⽅式只能扩充⽅法,不能扩充实例变量,@property(可能编译不报错,但是运⾏有问题)。

2)分类可以访问原来类中的成员。

3)如果分类和原来类出现同名的⽅法,优先调⽤分类中的⽅法,原来类中的⽅法会被忽略。

4)多个类⽬中有同名的⽅法的时候执⾏的是最后编译的那个类⽬的同名⽅法。

⼆、Extension1、为能够获得源代码的类添加私有的实例变量和⽅法。

2、注意:延展操作的类必须是能够获得源代码的类(具有.m⽂件的类)。

3、Category和Extension的区别1)作⽤不同:Category是扩展类的功能的,Extension是⽤来给类声明私有⽅法和实例变量的2)Category存放在⼀堆.h .m⽂件中,Extension存放在.m⽂件中3)Extension可以添加实例变量,Category不可以三、delegate设计模式1、delegate设计模式的使⽤我们⾸先需要明⽩三个要素-委托⽅,代理⽅,协议。

1)委托⽅:委托别⼈去执⾏某些操作的⼈(对象)。

2)协议(Protocol):委托⽅需要代理⽅执⾏的操作。

3)代理⽅:被委托去执⾏某些操作的⼈(对象)。

2、协议是⼀套标准(⼀堆⽅法的声明),只有.h⽂件。

协议的定义以@protocol开始,以@end结束。

⽐如:声明⼀个结婚协议。

@protocol MarryProtocol <NSObject> @required - (void)makeMoney; // 赚钱 @optional - (void)cooking; // 做饭 @end3、1)步骤1:委托⽅制定⼀套协议(在委托⽅的.h⽂件中),协议中声明委托⽅需要让代理⽅执⾏的⽅法(只有⽅法声明)。

c中object类型

c中object类型c中的object类型是指一个泛型类型,可以用来表示任何类型的数据。

在c语言中,没有像其他语言一样的对象概念。

但是,利用struct结构体类型和void指针,可以实现类似于对象的功能。

为了实现一个通用的object类型,可以定义一个结构体类型,其中包含一个void指针和一个函数指针。

void指针可以指向任意类型的数据,而函数指针可以指向任意的操作这些数据的函数。

例如,下面是一个简单的实现object类型的代码:```typedef struct {void* data;void (*print)(void*);} Object;void print_int(void* data) {int* num = (int*) data;printf('%d', *num);}void print_str(void* data) {char* str = (char*) data;printf('%s', str);}int main() {int num = 5;char* str = 'Hello, World!';Object obj1 = {&num, print_int};Object obj2 = {str, print_str};obj1.print(obj1.data); // prints '5'obj2.print(obj2.data); // prints 'Hello, World!'return 0;}```在上面的代码中,定义了一个Object类型的结构体,其中包含一个void指针和一个函数指针。

通过创建不同的Object对象,将不同类型的数据和不同的操作函数与之关联,从而实现了一个通用的object类型。

需要注意的是,在使用object类型时,需要确保使用正确的操作函数来处理数据,否则会造成数据错误或崩溃。

Objective-C快速入门视频教程-第四讲 Objective-C语言的面向对象特性

第2页
概述
Objective-C作为一种面向对象的编程语言,具有面向对象 的基本特征,即:封装、继承和多态。主要介绍ObjectiveC中有关面向对象基本概念:类、对象、方法和属性等。
第3页
Objective-C中的类
类是Objective-C中的一种重要的数据类型,是组成 Objective-C程序的基本要素。Objective-C的类声明和实现 包括两个部分:接口部分和实现部分。 @interface Song: NSObject { … … } … … @end @implementation Song … … @end
iPhone与iPad应用开发课程 精通Objective-C语言
第四讲 Objective-C语言的面向对象特性 主讲人:关东升 eorient@
主要知识点
• Objective-C中的类 • 方法和消息 • 访问成员变量 • 属性 • 构造方法 • 实例成员变量作用域限定符 • 类变量和类方法
第8页
消息发送
对于方法的调用通常也不称之为调用,而是称为发出消息, 操作符号不是“.”而是“[…]”,如下所示: [myObject insertObject: ojb1 atIndex:0]; 即向myObject对象发出一个消息insertObject:atIndex:。 而在实际使用时候这两种叫法都会用,这不是严格划分。
第4页
接口部分
使用关键字@interface,主要定义了类名、继承的父类、实 现的协议、成员变量和方法等信息。下面的代码是Song类的 接口部分声明。 @interface Song : NSObject { NSString *title; NSString *artist; long int duration; } - (void)start; - (void)stop; - (void)seek:(long int)time; @end

OBJECTIVE C知识点总结

/*1.类是一组具有相同特性和行为的某一类事和物的集合.2.对象是类的实例化.3.计算机语言的目的:模拟和解决生活中的问题.4.#include和#import的区别?答:(1)#import是oc中导入头文件的关键字,而且只需导入一次就行.(2)#include是c\c++导入头文件的关键字,include导入头文件容易引起交叉编译.5.创建对象的语法:(1)类名*对象名=[[类名alloc]init];(2)类名*对象名=[类名new];6.oc中的方法:(减号为实例方法,加号为类方法)-|+(返回类型)方法名:参数列表{//方法体}(1)器就是方法的意思;(2)void意思是无返回值;Student为类名,意思为有Student类型的返回值(3)with后面的name是属性的名称,newName 是属性name的参数名称初始化器:-|+(Student*)initWithName:(NSString*)newName{self=[super init];//继承父类NSObject 的init(初始化)方法self->name=newName;return self;}便利构造器:-|+(Student*)studentWithName:(NSString*)newName{Student*student=[[Student alloc]init];//实例化变量student=newName;return student;}7.属性#interface@property(nonatomic,retain)NSString *name;(声明)等价于:(setter方法:设置器)-(void)setAge:(int)newAge{age=newAge;}#implemention@synthesize name;(合成)等价于:(getter方法:访问器)-(int)getAge{return age;}8.点语法(1)=@"liming";等价于:[stu setName:@"liming"];(2)NSlog(@"%@",[]);等价于:NSlog(@"%@",[stu getName]);9.property有关语法(1)readwrite是可读可写特征;需要生成getter 方法和setter方法.(2)readonly是只读特性只会生成getter方法不会生成setter方法.(3)assign赋值特性,setter方法将传入参数赋值给实例变量.(4)retain表示持有特性,setter方法将传入参数先保留,再赋值,并且变量retaincount+1;(5)copy通过copy将对象复制一份,之前的对象会释放.(6)nonatomic表示单线程安全.(7)atomic表示多线程安全.10.变量作用域(1)@protected表示只有该类和其子类可以访问该类的变量.(2)@public表示无论是自身还是子类的对象,还是其它类型的对象均能访问该类的变量.(3)@private表示只有该类本身的对象可以访问该类的变量.11.面向对象三大特征:(1)封装:隐藏内部实现,稳定外部接口.(2)继承:子类继承父类的所有非私有的方法和属性.(3)多态:不同类型的对象,对同一方法名的不同响应.注意:要点一:oc中不允许多继承(一个类有多个父类),但允许多重继承(一个类的父类也拥有其自身的父类).要点二:一个类调用方法时,先从本类方法找,找不到再从父类找,一直往上直到找到NSObject类中.12.self:是指向当前对象的指针.super:调用父类的方法.id:是一个指向任何一个继承了NSObject类的对象.13.开闭原则和里氏替换原则(1)开闭原则(OCP Open Closed Principle):核心是:对扩展开放,对修改关闭.改变一个软件时,应该通过扩展的方式来改变软件,而不应该修改原有的代码来实现变化.(2)里氏替换原则(LSP Liskov Substitution Principle):(is A)原则:任何基类可以出现的地方,子类一定可以出现.a.继承必须确保超类所拥有的性质子类中仍然成立.b.子类对象总是可以替换父类对象.14.内存管理(1)黄金法则:凡是对象使用了alloc,new,copy和retain,那么必须有相对应的release和autorelease.引用计数机制:对象创建后,运行时系统通过对象维护的一个计数器来描述有多少个其他对象在使用自己,当计数器为0时,释放该对象占用的内存空间(该对象调用dealloc方法)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//--------字符串操作--NSString(静态字符串)------------------------------------- NSString *Beijing= @"北京欢迎您"; //字符串的声明 NSString *log=@"北京欢迎您a"; ----------------------------------------------------------------------------- [NSString stringWithFormat:@"I am %@",Beijing]; //字符串格式化 ------------------------------------------------------------------------------ NSString *zhui = [Beijing stringByAppendingString:@"哈哈哈"]; //字符串追加 --------------------------------------------------------------------- bool b=[Beijing isEqualToString:log]; //字符串比较 --------------------------------------------------------------------- NSString *hh = @"http://www.sina.com.cn"; if([hh hasPrefix:@"http"]){ //查找以http开头的字符串 NSLog(@"含有http"); }else{ NSLog(@"没有http"); } NSString *ss = @"123"; int a = [ss intValue]+13; //字符串转int型 ------------------------------------------------------------------------------- double dd = [ss doubleValue]+33.3; //字符串转double型 NSLog(@"%g",dd); --------------------------------------------------------------------- //字符串转数组 NSString *zifuchuan =@"one,two,three,four"; NSLog(@"string:%@",zifuchuan); //输出整个字符串中所有元素 NSArray *array = [zifuchuan componentsSeparatedByString:@","]; NSLog(@"array:%@",array); //输出整个数组中所有元素 NSString *value = [array objectAtIndex:0]; //取出第0个元素 NSLog(@"value:%@",value); ----------------------------------------------------------------------------- //数组转字符串 NSString * zifuchuan2 = [array componentsJoinedByString:@","]; NSLog(@"zifuchuan2:%@",zifuchuan2); —————————————————————————————————— //-substringToIndex: 从字符串的开头一直截取到指定的位置,但不包括该位置的字符 NSString *string1 = @"This is a string"; NSString *string2 = [string1 substringToIndex:3]; NSLog(@"string2:%@",string2); —————————————————————————————————— //-substringFromIndex: 以指定位置开始(包括指定位置的字符),并包括之后的全部字符 NSString *string1 = @"This is a string"; NSString *string2 = [string1 substringFromIndex:3]; NSLog(@"string2:%@",string2); —————————————————————————————————— //-substringWithRange: //按照所给出的位置,长度,任意地从字符串中截取子串 NSString *string1 = @"This is a string"; NSString *string2 = [string1 substringWithRange:NSMakeRange(0, 4)]; NSLog(@"string2:%@",string2); ———————————————————————————————————————

//--------操作动态字符串--NSMutableString---------------------------------------------------- //创建可变字符串 NSMutableString *mstr = [[NSMutableString alloc] init]; NSString *str1 = @"This is a example."; mstr = [NSMutableString stringWithString:str1]; //插入字符 [mstr insertString:@"very easy " atIndex:10]; //删除一些字符 [mstr deleteCharactersInRange:NSMakeRange(10,5)]; //查找并删除 NSRange substr = [mstr rangeOfString:@"example"]; //字符串查找,可以判断字符串中是否有 if (substr.location != NSNotFound) { [mstr deleteCharactersInRange:substr]; } //重新设置字符串 [mstr setString:@"This is string AAA"]; //替换字符串 [mstr replaceCharactersInRange:NSMakeRange(15, 2) withString:@"BBB"]; //从第15个字符串处替换掉后2个字符串 ——————————————————————————————————

//查找第一个并替换 NSString *search = @"This is"; NSString *replace = @"An example of"; substr = [mstr rangeOfString:search]; if (substr.location != NSNotFound) { [mstr replaceCharactersInRange:substr withString:replace]; //把第1个遇到的substr替换为replace NSLog(@"%@",mstr); }

//查找全部匹配的,并替换 search = @"a"; replace = @"X"; substr = [mstr rangeOfString:search]; while (substr.location != NSNotFound) { [mstr replaceCharactersInRange:substr withString:replace]; substr = [mstr rangeOfString:search]; } NSLog(@"%@",mstr); 常见的NSString方法 +(id)stringWithContentsOfFile:path encoding:enc error:err 创建一个新字符串并将其设置为path指定的文件的内容,使用字符编码enc,如果非零,则返回err中的错误。 +(id)stringWithContentsOfURL:url encoding:enc error:err 创建一个新字符串,并将其设置为url的内容,使用字符编码enc,如果非零,则返回err中的错误。 +(id)string 创建一个新的空字符串。 +(id)stringWithString:nsstring 创建一个新字符串,并将其设置为nsstring -(id)initWithString:nsstring 将新分配的字符串设置为nsstring -(id)initWithContentsOfFile:path encoding:enc error:err 将字符串设置为path指定的文件的内容 -(id) initWithContentsOfURL:url encoding;enc error:err 将字符串设置为url(NSURL*)url的内容,使用字符编码enc,如果非零,则返回err中的错误。 -(UNSIgned int)lengtn 返回字符串中字符数目 -(unichar) characterAtIndex:i 返回索引i的Unicode字符 -(NSString*)substringFromIndex:i 返回从i开始直到结尾的字符串 -(NSString*)substringToIndex:i 返回从该字符串开始位置到索引i的子字符串

-(NSComparator *)caseInsensitiveCompare:nsstring 比较两个字符串,忽略大小写 -(NSComparator *)compare:nsstring 比较两个字符串 -(BOOL)hasPrefix:nsstring 测试字符串是否以nsstring开始 -(BOOL)isEqualToString:nsstring 测试两个字符串是否相等。 -(NSString*)capitalizedString 返回每个单词首字母大写的字符串(每个单词的其余字母转换为小写)

相关文档
最新文档