Object-C学习总结1

本文主要介绍了Objective-C的基础知识,包括减号(-)和加号(+)的意义,Objective-C与C++的区别,如所有类继承自NSObject,对象为指针形式,使用消息传递等。此外,还讲解了Objective-C中的命名前缀,如NS开头的函数库,以及@interface、@implementation的使用。文中详细阐述了方法参数传递、数组和字典的操作,并提到了BOOL类型、nil的含义以及多线程中的NSThread。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Object-C总结

1.减号 (-)和加号 (+)

减号 表示一个函数、方法、或者消息的开始  (实例方法)

加号 表示其他函数可以直接调用这个类中的这个函数,而不要创建实例 (类方法)


注:Object中没有public和private的概念,你可以认为全部是public

Objective-C与C++的不同之处有:

Objective-C中所有的类都必须继承自NSObject。
Objective-C中所有对象都是指针的形式。
Objective-C用self代替this。
Objective-C使用id代替void*。
Objective-C使用nil表示NULL。
Objective-C只支持单继承。
Objective-C使用YES/NO表示TRUE/FALSE
Objective-C使用#import代替#include
Objective-C中用消息表示类的方法,并采用[aInstance method:argv]调用形式。
Objective-C支持反射机制。
Objective-C支持Dynamic Typing, Dynamic Binding和Dynamic Loading。


2.中括号 [  ] 时一个消息


3.NS****   函数库中类都有NextStep打头  这是一个缩写前缀

Objective-C中的命名前缀说明:

NS:NextStep
CF:Core Foundation
CA:Core Animation
CG:Core Graphics
UI:User Interface


4.import等同于#include

5.@interface 用来定义类


@interface A:NSObject

@end


6.@implementation 用来实现类


@implementation A

@end


7.一个方法如何传递多个参数



Objective-C中的函数声明格式有:

-/+ (return type) function_name;
-/+ (return type) function_name : (parameter type) parameter;
-/+ (return type) function_name :
(parameter type) parameter1 otherParameter :
(parameter_type) parameter2

以上参数说明: – 表示一般函数,+ 表示静态函数。

otherParameter是参数的别名(第一个参数的别名省略),在函数调用时方便指定。


注:(方法的数据类型)函数名:(参数1数据类型)参数1的数值的名字  

参数2的名字:(参数2的数据类型)参数2的数值名字


如:-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath


举个例子,一个方法的定义:

 

-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName;

 

 

实现这个函数的时候:

 

-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName{

大儿子 = myOldestKidName;

二儿子 = mySecondOldestKidName;

三儿子 = myThirdOldestKidName;

}

 

调用的时候:

 

Kids *myKids = [[Kids alloc] init];

[myKids setKids: @”张大力” secondKid: @”张二力” thirdKid: @”张小力”];


  1. id等同于void

在Object-C里,一切都是用指针存在,你获取到的就是

那个对象在内存的位置,那么id就是知道这个位置


  1. NSArray 数组
cocoa使用NSArray表示数组,但不能存醋基本数据类型、enum、struct、nil,只能存储Object的对象

NSArray *array=[NSArray arrayWithObjects: @"One", @"Two", @"Three", nil];

 //从这个类方法 arrayWithObjects 的定义可以看出,它使用 nil 表示数组元素结束,这也是 nil 不能存储在 NSArray 中的原因。
int count=[array count];//获取数组元素的格式,本例中为 3。
int i;
for(i=0; i<count;i++){

NSLog(@"%@",[array objectAtIndex: i]);

//遍历数组元素,objectAtIndex 方法获取指定索引位置的元素。 }

NSString *s=@"iPhone,Android,Windows Phone 7";
array=[s componentsSeparatedByString: @","];//按照一个字符串将字符串拆分为数组。 

s=[array componentsJoinedByString: @" "];//按照一个字符串将数组连接为字符串。


同理,NSMutableArray 为长度可变的数组,相当于 JAVA 中的 List。 例:
NSMutableArray *mArray=[NSMutableArray arrayWithCapacity: 10];

 [mArray addObject: @"Apple"];//添加数组元素

[mArray addObject: @"Google"];
[mArray addObject: @"MicroSoft"];
[mArray removeObjectAtIndex: 2];//移除指定索引位置的数组元素 

s=[mArray componentsJoinedByString: @","];//拼接数组元素为字符串 

NSLog(s);


3 字典

NSDictionary 用于存储 key-value 的数据结构,与 JAVA 中的 Map 类似。
例:
NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys: @"Apple", @"A", @"Google", @"G", nil];
//dictionaryWithObjectAndKeys 后的可变参数,每两个为一个 value-key,以 nil 表示结束。

 NSLog(@"%@",[dic objectForKey: @"A"]);//按照指定的 key 查询 value

同样的有 NSMutableDictionary 表示长度可变的字典。
例:
NSMutableDictionary *mDic=[NSMutableDictionary dictionaryWithCapacity: 10];

 [mDic setObject: @"Apple" forKey: @"A"];//添加 value-key 对
[mDic setObject: @"Google" forKey: @"G"];
[mDic setObject: @"Windows Phone 7" forKey: @"W"];
[mDic removeObjectForKey: @"W"];//移除指定 key 的 value


  10.BOOL 其实一个char 是低八位的值大于0就是1否则为0


10,nil 就是NULL  表示空指针


11, @" xxxx"  字符串  但@" "  不支持中文


这篇Objective-C的参考资料也比较好,如果你有兴趣可以一读。

http://www.otierney.net/objective-c.html.zh-tw.big5


  1. NSAutoreleasePool :半自动管理内存
NSAtuoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[pool release];


2.数据缓冲区 NSDate类型来实现缓冲区


NSDate是一个长度不可变的数据缓冲区,NSMutabelDate用来存储长度可变的数据缓冲区


3. Object-C 中的一个对象是否可以被复制,要看它的类型是否遵循 NSCopying 协议,这个协议 中有个复制方法-(id) copyWithZone: (*NSZone) zone 需要我们去实现


4.多线程

  线程  NSThread  Object-C中NSthread类型表示线程,线程对象创建有一下几种方法


A.- (id) init;


B.- (id) initWithTarget: (id) target selector: (SEL)selector object: (id) argument; 

第一个参数指定目标对象,一般情况下就是当前的实例 self。第二个参数指定要运行的方法, 相当于 JAVA 中的 run 方法。第三个参数一般为 nil。


C.+(void) detachNewThreadSelector:(SEL)aSelector

toTarget:(id)aTarget withObject:(id)anArgument 

这个方法是类方法,与第二个方法其实在参数上是一致的,区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值