五、oc中self与super的基本使用

本文详细介绍了Objective-C中的self与super关键字的使用方法、基本概念及注意事项,包括self的基本使用、super的作用以及如何避免在方法中再次使用self导致的死循环。通过实例解析,帮助初学者更好地理解和运用这两个关键字。

      

------- <a href="http://www.itheima.com" target="blank">Windows Phone 7手机开发</a>、<a href="http://www.itheima.com" target="blank">.Ios培训</a>、期待与您交流! -------

    

       我们知道大部分oc关键字都是以@开头的,例如,初学者最常见的几个 @interface @implementation @end 等等,但是self与super是oc中为数不多的,前面不加@的关键字。一般情况下,我们调用一个方法,包括类方法与对象方法,都会采用这样的格式,[方法的执行者 方法名],类方法与对象方法的区别在于,方法执行者的不同,类方法的执行者一般是类名或者说是类对象,而对象方法的执行者,一般是类类型的对象。

    self的基本使用,谁调用了当前方法,self就代表谁,self出现在对象方法里则代表了对象,self出现在类方法里面则代表了类。在对象方法中,可以使用self->成员变量来访问当前对象内部的成员变量,而[self 方法名]可以调用其他对象方法或者类方法。

    例如:

#import<Foundation/Foundation.h>

@interface Tiger : NSObject
+ (void)eat;
+ (void)run;
@end

@implementation Tiger

+ (void)eat
{
    NSLog(@"The tiger is eating......");
    
}
+ (void)run
{
    [self eat];  //用self调用Tiger类的eat方法
    NSLog(@"The tiger is running......");
}

@end


int main(void)
{
    Class s = [Tiger class]; // 创建类对象s,此处的 s==Tiger
    [s run];
    return 0;
}
   

    还有需要值得注意的是,不要在方法中再次用self调用自己,这样会引发死循环。

    例如:

#import<Foundation/Foundation.h>

@interface Fruit : NSObject

- (void)test;

@end


@implementation Fruit

- (void)test
{
    NSLog(@"调用了-test方法");
    //下面这条语句会引发死循环
    [self test];
}

@end

int main(void)
{
    Fruit *f = [[Fruit alloc] init];
    [f test];
    return 0;
}
    

      除此之外,我们得明白,函数是不依赖对象而存在的,意思就是调用函数的时候,不需要用到类对象或者是类类型的对象。

     例如:

     

#import<Foundation/Foundation.h>

@interface Fruit : NSObject

- (void)method;

@end


@implementation Fruit

void new()
{
    NSLog(@"调用了new函数");
}

- (void)method
{
    new(); // 正确的调用函数的方法
    NSLog(@"new----");
    //下面这条语句会报错,因为函数是不依赖于对象而存在的,不能用对象来调用函数
    //[self new];
}
@end


int main(void)
{
    Fruit *f = [[Fruit alloc] init];
    [f method];
    return 0;
}
     

     super的作用是,直接调用父类中的某个方法,super处在对象方法中,那么就会调用父类的对象方法,super处在类方法中,那么就会调用父类的类方法。super一般使用在子类重写父类的方法时,想保留父类的一些行为。意思就是需要有继承,才会有super的使用。

     例如:

#import<Foundation/Foundation.h>

@interface People : NSObject

- (void)walk;

@end

@implementation People

- (void)walk
{
    NSLog(@"调用了People的-walk方法");
}

@end


@interface Adult : People

- (void)walk;

@end

@implementation Adult

- (void)walk
{
     NSLog(@"调用了Adult的-walk方法");
    
    [super walk];  //此语句,直接调用父类的中的walk方法
}

@end

int main(void)
{
    
    
    Adult *p = [[Adult alloc] init];
    [p walk];
    return 0;
}

      综上所述,self与super都是oc中常用的关键字,是初学者必须掌握好的两个关键字,self用于当前类对象或者类类型对象调用方法,谁调用即谁就是self。super一般用于子类想重写父类的方法,但又想保留父类的一些行为。


   

内容概要:本文介绍了基于贝叶斯优化的CNN-LSTM混合神经网络在时间序列预测中的应用,并提供了完整的Matlab代码实现。该模型结合了卷积神经网络(CNN)在特征提取方面的优势长短期记忆网络(LSTM)在处理时序依赖问题上的强大能力,形成一种高效的混合预测架构。通过贝叶斯优化算法自动调参,提升了模型的预测精度泛化能力,适用于风电、光伏、负荷、交通流等多种复杂非线性系统的预测任务。文中还展示了模型训练流程、参数优化机制及实际预测效果分析,突出其在科研工程应用中的实用性。; 适合人群:具备一定机器学习基基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)础和Matlab编程经验的高校研究生、科研人员及从事预测建模的工程技术人员,尤其适合关注深度学习智能优化算法结合应用的研究者。; 使用场景及目标:①解决各类时间序列预测问题,如能源出力预测、电力负荷预测、环境数据预测等;②学习如何将CNN-LSTM模型贝叶斯优化相结合,提升模型性能;③掌握Matlab环境下深度学习模型搭建超参数自动优化的技术路线。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注贝叶斯优化模块混合神经网络结构的设计逻辑,通过调整数据集和参数加深对模型工作机制的理解,同时可将其框架迁移至其他预测场景中验证效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值