Object-C学习总结1

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

 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 

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

本课题设计了一种利用Matlab平台开发的植物叶片健康状态识别方案,重点融合了色彩与纹理双重特征以实现对叶片病害的自动化判别。该系统构建了直观的图形操作界面,便于用户提交叶片影像并快速获得分析结论。Matlab作为具备高效数值计算与数据处理能力的工具,在图像分析与模式分类领域应用广泛,本项目正是借助其功能解决农业病害监测的实际问题。 在色彩特征分析方面,叶片影像的颜色分布常与其生理状态密切相关。通常,健康的叶片呈现绿色,而出现黄化、褐变等异常色彩往往指示病害或虫害的发生。Matlab提供了一系列图像处理函数,例如可通过色彩空间转换与直方图统计来量化颜色属性。通过计算各颜色通道的统计参数(如均值、标准差及主成分等),能够提取具有判别力的色彩特征,从而为不同病害类别的区分提供依据。 纹理特征则用于描述叶片表面的微观结构与形态变化,如病斑、皱缩或裂纹等。Matlab中的灰度共生矩阵计算函数可用于提取对比度、均匀性、相关性等纹理指标。此外,局部二值模式与Gabor滤波等方法也能从多尺度刻画纹理细节,进一步增强病害识别的鲁棒性。 系统的人机交互界面基于Matlab的图形用户界面开发环境实现。用户可通过该界面上传待检图像,系统将自动执行图像预处理、特征抽取与分类判断。采用的分类模型包括支持向量机、决策树等机器学习方法,通过对已标注样本的训练,模型能够依据新图像的特征向量预测其所属的病害类别。 此类课题设计有助于深化对Matlab编程、图像处理技术与模式识别原理的理解。通过完整实现从特征提取到分类决策的流程,学生能够将理论知识与实际应用相结合,提升解决复杂工程问题的能力。总体而言,该叶片病害检测系统涵盖了图像分析、特征融合、分类算法及界面开发等多个技术环节,为学习与掌握基于Matlab的智能检测技术提供了综合性实践案例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值