Objective-C入门(Learning Objective-C)

Objective-C是一种C语言的超集,支持基本的C语言语法。类的定义和实现分别放在头文件和源文件中,通过@interface和@end关键字进行声明。方法分为类方法和实例方法,消息传递是Objective-C实现多态的关键。协议用于定义接口,属性简化了访问方法的声明。字符串通过NSString类进行封装,提供多种处理方法。本文详细介绍了Objective-C的基本概念、类、方法、协议、属性和字符串处理。

我本来想翻译一下的,但是看到网上以及有一些翻译的,所以就直接转载了.

原贴地址:http://www.i-alive.com/post/45/

英文版地址:https://developer.apple.com/library/ios/#referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/_index.html#//apple_ref/doc/uid/TP40007594

Objective-C是C语言的一个超集,也就是说,它支持基本的C语言的语法。
类的定义和实现是分别放在头文件和源文件中的。头文件的扩展名是.h;源文件是.m;还有一种.mm是用来放C++代码的。

Classes(类)

Objective-C类的定义分为声明和实现两部分:
interface部分包含类的声明,实例变量定义,以类相关的方法。interface通常都在.h文件中;
代码实现部分包含类方法的代码,这部分放在.m文件中。

下图给出了类声明的语法。
objecttive-c class
类MyClass继承了基类NSObject。
类的声明以@interface开始,后面跟着类名及继承的基类;声明以@end结束。
类的实例变量(或者叫成员变量)放在大括号中({ & });
类的方法在大括号外面声明。
每行语句是以分号(;)来结尾的。

objective-c同时支持强类型和弱类型,强类型就不用说了,弱类型的话,是用“id”来声明,用这个声明的变量,什么都能装,大概就是这个意思。

Methods and Messaging(方法与消息)

Methods:
objective-c的类可以声明两种方法:类方法和实例方法。
实例方法就是只有声明实例后才能调用,声明的时候用“-”;
类方法就像静态方法一样,直接用类就能调用,声明的时候用“+”。
下图为方法声明语法:
类方法声明
 

Message:
叫这个message我总觉得怪怪的,怎么翻译都觉得别扭。算了,不纠结了,直接说吧。
调用一个方法的方式,就是发对象消息(messaging an object)。message就是方法签名。所有发送给对象的message都是动态调用的,这也是objective-c实现多态的方法。

[myArray insertObject:anObject atIndex:0];

由上面的示例可以看到,一次调用,一个message是用一堆中括号([ & ])来包起来的。在中括号内,接收message的对象在左边( myArray ),message在右边( 也就是insterObject:anObject atIndex:0 )。

message也可以嵌套,比如参数可以是一个message,比如,message执行的结果可以传给参数,或把message作为接收方,就行下面这行代码一样,这样代码也会比较简洁。

[[myAppObject theArray] insertObject:[myAppObject objectToInsert] atIndex:0];

Objective-C用“.”操作符来操作访问方法( accessor methods ),用来获取或设置对象状态。访问方法的形式一般来说就是 :
-(type) prropertyName                    //读取
-(void) setPropertyName:(type)    //设置

下面是示例代码:

//在消息中用“.”操作符调用访问方法
[myAppObject.theArray insertObject:[myAppObject objectToInsert] atIndex:0];

//赋值时的"."操作符调用访问方法
myAppObject.theArray = aNewArray;	

类方法的实现示例:

@implementation MyClass
 
- (id)initWithString:(NSString *)aName
{
    self = [super init];
    if (self) {
        name = [aName copy];
    }
    return self;
}
 
+ (MyClass *)createMyClassWithString: (NSString *)aName
{
    return [[[self alloc] initWithString:aName] autorelease];
}
@end

note:在objective-C中 nil 相当于 null。比如:NSMutableArray *myArray = nill。

Declared Properties(属性)

声明属性要比声明访问方法简单方便的多。
属性的声明是和方法的声明放在一块儿的,用“@property”来定义。
你一可以对属性做一些设定,比如只读或是读取时copy对象什么的,如下:

@property BOOL flag;
@property (copy) NSString *nameObject;  // Copy the object during assignment.
@property (readonly) UIView *rootView;  // Declare only a getter method.

每一个可读的属性,会自动设定一个同名的方法,用来读取;

每一个可写的属性,会自动设定一个setPropertyName形式的方法,以set开头,后面跟开头字母大写的属性名。

在类的实现部分,你可以用“@synthesize”来指示编译器生成属性相应的方法。
可以用两种方式声明:

@synthesize flag;
@synthesize nameObject;
@synthesize rootView;
@synthesize flag, nameObject, rootView;

一般来说,属性减少了很多代码量。因为用访问方法实现的话,做的事情也差不多,而其还有写一堆实现代码。用@property来声明,再用@synthesize在编译的时候生成获取及设置方法,明显要简单一些。

strings(字符串)

作为C的超集,它支持C风格的字符串。但一般来说不会用C风格的字符串。
字符串会作为类NSStrings的对象来传送。
用类NSStrings来包装字符串有很多好处,比如可以使用一些内建的方法来处理字符串,比如按长度排序,支持unicode,以及printf风格的格式化等等。
因为字符串经常被用到,所以,objective-c提供了一种简写方式来建立NSString对象。
如下所示(用@):

NSString *myString = @"My String\n";
NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
 
// Create an Objective-C string from a C string
NSString *fromCString = [NSString stringWithCString:"A C string" 
                                  encoding:NSASCIIStringEncoding];

protocols(协议)

protocols按我的理解应该跟C#里的接口差不多意思:

  • 可以被任何类实现;
  • 只定义接口,没有实现,没有实例变量,实现部分交给继承的类;
  • 常常用来指定委托对象的接口;
  • 声明方式:
@interface MyClass : NSObject  {
}
@end

通过下面的代码理解一下协议,委托及其他对象直接的关系:

@protocol MyProtocol
- (void)myProtocolMethod;
@end

假设有个UIAplication类实现了某个应用的一些方法;如果想接收这个应用的一些通知,我们不用继承这个UIAplication类来实现,该类通过调用方法,将通知发给委托对象。另一个实现了委托协议(UIAplicationDelegate protocol)方法的对象,会接收通知,并提供一个合适的回应信息。
要实现一个接口,只要用“<>”抱住协议名称,放在继承类后面就可以了,类的声明部分不需要对协议方法再次声明。

 

多源动态最优潮流的分布鲁棒优化方法(IEEE118节点)(Matlab代码实现)内容概要:本文介绍了基于Matlab实现的多源动态最优潮流的分布鲁棒优化方法,适用于IEEE118节点电力系统。该方法旨在应对电力系统中源荷不确定性带来的挑战,通过构建分布鲁棒优化模型,有效处理多源输入下的动态最优潮流问题,提升系统运行的安全性和经济性。文中详细阐述了模型的数学 formulation、求解算法及仿真验证过程,并提供了完整的Matlab代码实现,便于读者复现与应用。该研究属于电力系统优化调度领域的高水平技术复现,具有较强的工程实用价值。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事电力系统优化调度的工程技术人员,尤其适合致力于智能电网、鲁棒优化、能源调度等领域研究的专业人士。; 使用场景及目标:①用于电力系统多源环境下动态最优潮流的建模与求解;②支撑含可再生能源接入的电网调度决策;③作为鲁棒优化方法在实际电力系统中应用的教学与科研案例;④为IEEE118节点系统的仿真研究提供可复现的技术支持。; 阅读建议:建议结合提供的Matlab代码逐模块分析,重点关注不确定变量的分布鲁棒建模、目标函数构造及求解器调用方式。读者应具备一定的凸优化和电力系统分析基础,推荐配合YALMIP工具包与主流求解器(如CPLEX、Gurobi)进行调试与扩展实验。
内容概要:本文系统介绍了物联网与云计算的基本概念、发展历程、技术架构、应用场景及产业生态。文章阐述了物联网作为未来互联网的重要组成部分,通过RFID、传感器网络、M2M通信等技术实现物理世界与虚拟世界的深度融合,并展示了其在智能交通、医疗保健、能源管理、环境监测等多个领域的实际应用案例。同时,文章强调云计算作为物联网的支撑平台,能够有效应对海量数据处理、资源弹性调度和绿色节能等挑战,推动物联网规模化发展。文中还详细分析了物联网的体系结构、标准化进展(如IEEE 1888、ITU-T、ISO/IEC等)、关键技术(中间件、QoS、路由协议)以及中国运营商在M2M业务中的实践。; 适合人群:从事物联网、云计算、通信网络及相关信息技术领域的研究人员、工程师、高校师生以及政策制定者。; 使用场景及目标:①了解物联网与云计算的技术融合路径及其在各行业的落地模式;②掌握物联网体系结构、标准协议与关键技术实现;③为智慧城市、工业互联网、智能物流等应用提供技术参考与方案设计依据;④指导企业和政府在物联网战略布局中的技术选型与生态构建。; 阅读建议:本文内容详实、覆盖面广,建议结合具体应用场景深入研读,关注技术标准与产业协同发展趋势,同时结合云计算平台实践,理解其对物联网数据处理与服务能力的支撑作用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值