Modern Objective-C

随着iOS 6 SDK的发布,又有一些新的改进,我们称之为Modern Objective-C。对于Modern Objective-C的详细讲解超出了本书的范围,我们在这里只是介绍一些关键的特性。

默认属性自动绑定(Default Property Synthesis)

有经验的iOS 开发人员都了解在接口文件中定义属性(property),然后在实现文件中定义synthesize代码。如下是iOS 应用程序中一段典型的接口文件代码。

#import <UIKit/UIKit.h>
@interface PhotoCollectionViewCell : UICollectionViewCell
@property (strong, nonatomic) IBOutlet UIImageView *imageView;
@end

在Modern Objective-C 引入之前,上述接口文件中定义的属性还需要相应的实现文件中定义@synthesize 指令,这样才能在实现文件中可以访问。
#import "PhotoCollectionViewCell.h"
@implementation PhotoCollectionViewCell
@synthesize imageView;
……
@end

然而在Modern Objective-C 引入之后,就可以不必编写@synthesize 指令了,@synthesize指令默认自动生成。
#import "PhotoCollectionViewCell.h"
@implementation PhotoCollectionViewCell
……
@end

当使用默认属性自动绑定时,可以使用属性名,前面添加一个下划线的前缀,就可以访问实例变量。例如访问前面定义的imageView实例变量,使用_imageView 或 self.imageView 就可以访问了。

方法顺序(Method Ordering)

方法顺序是指方法在Objective-C 代码文件中定义的位置。之前,要求方法定义的位置在它被调用之前,简单而言,就是先定义方法,然后才可以调用。如果将方法的定义放置在调用位置的后面,将导致编译错误。
@implementation DatabaseHandler
- (void)closeDatabaseFile {
[self flushBuffer];
}

- (void)flushBuffer {
// Code here to flush buffer
}

对于Modern Objective-C而言,方法的顺序不再是问题了,上述代码在编译时不会产生错误。

NSNumber 简化用法

NSNumber对象的初始化需要调用类的相关方法,意味这需要编写一些代码。如下是通过整型数据初始化NSNumber对象:
NSNumber *number = [NSNumber numberWithInt:100];
通过Modern Objective-C,可以简化代码获得相同的结果:
NSNumber *number = @100;
相似地,通过浮点数初始化NSNumber对象,之前的代码如下:
NSNumber *number = [NSNumber numberWithFloat:3.1415f];
也可通过如下的代码简化:
NSNumber *number = @3.1415f;
实际上,所有NSNumber类的numberWithXXX 方法,都可以使用Modern Objective-C 代码简化:
NSNumber *number;

number = @’A’; // Character
number = @YES; // Boolean
number = @111222333ul; // Unsigned Long
number = @123456l; // Long Long
number = @123.45 // Float
number = @123 // Integer
number = @123.432 // Double

现在直接使用@开头,加上数字,就完成了NSNumber对象的初始化,简单多了。

NSArray 数组简化

Modern Objective-C 也简化了NSArray对象的初始化方法。下面是之前的方式初始化NSArray对象的代码:
NSArray *carMakes;
carMakes = [[NSArray alloc]
initWithObjects:@"Chevy",
@"BMW",
@"Toyota",
@"Volvo",
@"Smart", nil];

使用Modern Objective-C的Array literals,上述代码可以简化为:
NSArray *carMakes;
carMakes = @[@"Chevy", @"BMW", @"Toyota", @"Volvo", @"Smart"];

现在,访问数组元素也相同地做了简化。例如,下面的代码用来访问数组元素0:
NSString *firstCar = [carMakes objectAtIndex:0];
使用Modern Objective-C,代码可以简化为:
NSString *firstCar = carMakes[0];

上述新的语法和我们所属性的C#、Java或C++语言很相似。相同地,给数组元素赋值的语法也进行了简化,可以通过如下代码对数组中第二个元素进行赋值操作:
carMakes[1] = @”VW Jetta”;

不过,上述初始化数组的代码默认创建不可变数组。如果需要可变数组,则还需要进一步调用mutableCopy方法,创建可变数组。
NSMutableArray *carMakes = [@[@"Chevy", @"BMW", @"Toyota", @"Volvo", @"Smart"] mutableCopy];

NSDictionary字典简化

和数组一样,Modern Objective-C 也简化了NSDictionary对象,NSDictionary 对象可通过如下的语法简化多组key-value键值对来初始化。之前初始化NSDictionary对象的代码如下所示:
NSDictionary *bookListing = [NSDictionary dictionaryWithObjectsAndKeys: object1, key1, object2, key2, object3, key3, nil];

通过Objective-C可以简化代码如下:
NSDictionary *bookListing = {key1 : object1, key2 : object2, key3 : object3};
和数组一样,下标可用来访问字典项,如下使用key1下标来访问bookListing字典对象:
bookObject = bookListing[key1];
相同地,如下代码可更新bookListing字典对象中key2键所对应的对象值:
bookListing[key2] = newBookObject;
和NSArray数组一样,使用上述语法定义的字典对象默认是不可变的。

iOS 6 SDK内置的Objective-C 编译器包含了大量的改进,可简化代码的阅读和减少开发人员输入代码量,为开发人员节省了不少时间。


Heqin:用了这么久, 才知道这个原来叫Modern Objective-c.啊, 学习了。

使用优化算法,以优化VMD算法的惩罚因子惩罚因子 (α) 和分解层数 (K)。 1、将量子粒子群优化(QPSO)算法与变分模态分解(VMD)算法结合 VMD算法背景: VMD算法是一种自适应信号分解算法,主要用于分解信号为不同频率带宽的模态。 VMD的关键参数包括: 惩罚因子 α:控制带宽的限制。 分解层数 K:决定分解出的模态数。 QPSO算法背景: 量子粒子群优化(QPSO)是一种基于粒子群优化(PSO)的一种改进算法,通过量子行为模型增强全局搜索能力。 QPSO通过粒子的量子行为使其在搜索空间中不受位置限制,从而提高算法的收敛速度与全局优化能力。 任务: 使用QPSO优化VMD中的惩罚因子 α 和分解层数 K,以获得信号分解的最佳效果。 计划: 定义适应度函数:适应度函数根据VMD分解的效果来定义,通常使用重构信号的误差(例如均方误差、交叉熵等)来衡量分解的质量。 初始化QPSO粒子:定义粒子的位置和速度,表示 α 和 K 两个参数。初始化时需要在一个合理的范围内为每个粒子分配初始位置。 执行VMD分解:对每一组 α 和 K 参数,运行VMD算法分解信号。 更新QPSO粒子:使用QPSO算法更新粒子的状态,根据适应度函数调整粒子的搜索方向和位置。 迭代求解:重复QPSO的粒子更新步骤,直到满足终止条件(如适应度函数达到设定阈值,或最大迭代次数)。 输出优化结果:最终,QPSO算法会返回一个优化的 α 和 K,从而使VMD分解效果最佳。 2、将极光粒子(PLO)算法与变分模态分解(VMD)算法结合 PLO的优点与适用性 强大的全局搜索能力:PLO通过模拟极光粒子的运动,能够更高效地探索复杂的多峰优化问题,避免陷入局部最优。 鲁棒性强:PLO在面对高维、多模态问题时有较好的适应性,因此适合海上风电时间序列这种非线性、多噪声的数据。 应用场景:PLO适合用于优化VMD参数(α 和 K),并将其用于风电时间序列的预测任务。 进一步优化的建议 a. 实现更细致的PLO更新策略,优化极光粒子的运动模型。 b. 将PLO优化后的VMD应用于真实的海上风电数据,结合LSTM或XGBoost等模型进行风电功率预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值