学习笔记10-OC类的特性

1     NSString 类

处理字符串的类。

1) 创建常量字符串

NSString  *str =@”abc“;  //str 为指针变量  ”abc“为字符串常量

       NSString  *str=[NSString  new];//使用类new方法创建字符串对象

          str=@“abc“;

       NSString  *str=[NSString  stringWithFormat:@”xxx%d“,i];//使用类方法格式化创建字符串。

NSString  *str1=[[NSString  alloc] initWithString:str]; // 先分配空间之后用str的值初始化 之后把地址返回给str1.

2)NSString   字符串长度计算

       类方法 length

[str length]; //返回值类型为NSUInteger  无符号整形 输出用 ld

OC中

英文和中文都是一个字符 占一个字节。

C 中 中文占3个字节。

2     多文件开发

把声明和实现分开把声明写在.h中 实现在 .m中 在.h中添加import  .m 在主函数中添加头文件。

还可以把 类 按类别放到不同的文件夹中。

3     类方法(+)

    优点:节省内存  提高效率 作为工具方法

对象方法使用的时候必须创建对象,使用对象调用。

类方法使用的时候不需要创建实例对象,不依赖任何对象方法和成员变量。

方法定义和对象方法相似只是前面是 + 号。

调用和对象方法一样。

 

注意

1)    类方法可以和对象方法同名,调用者不一样。

2)    类方法可以继承。

3)    声明和实现同对象方法类似。

4)    类方法只能通过类调用。直接到代码区找类方法。

 

 

4 对象方法和类方法区别

对象方法

1)对象方法可以在方法中创建对象,使用新创建的对象调用对象方法

2)对象方法可以通过 self 调用该类的对象方法。

3)对象作为方法的参数传递过来,可以使用传递过来的对象调用对象方法

类方法

1)类方法可以调用其它的类方法

2)可以使用self 调用其他类方法

3) 类方法中可以调用对象方法  对象作为参数传递或者在类方法中创建对象。

4)类方法不可以调用自身。会成死循环。

5 匿名类

       在方法需要使用调用类方法的时候生成并调用。

       [[Personnew] goHome :[Car new]];

             

6  封装

       作用:隐藏类的实现隐藏数据 掌握对实例变量的管理权。

       原理:实例变量默认为只可被当前类对象访问。

       实现步骤

1)    设置实例变量的setter和getter方法。类似java的set和get。

使用set方法对成员变量赋值,使用get方法获得成员变量的值。

set方法命名规范

a 必须以set开头

b set后面跟成员变量的名称首字母大写。(去掉下划线)。

c 返回值为void。

d 一定要接收一个参数,参数类型和成员变量的类型一致。

e 形参名不能和成员变量名一样。一般去掉下划线的成员变量名。

f  set方法是一个对象方法。

g 实现中一定要给实例变量赋值。

 

              get方法的命名规范

                     a一定要有返回值,返回值类型与成员变量的类型一致

                     b方法名和成员变量名一样。(一般为去掉下划线的成员变量)

                     c 没有参数。

                     d  是对象方法

                     e  实现中一定返回实例变量值。

7 对象和对象关系

1) 组合模式(部分-整体)相同基类的对象组合到树形结构中。

2) 依赖关系 A对象作为B对象的局部变量或者方法的形参 ,B 依赖于A .A和B是依赖关系

耦合度:修改一个对象时,对另一个对象的影响程度。

低耦合:修改一个对象时,对另一个对象的影响小

高内聚:一个对象仅仅做自己相关的事情。

3) 关联关系

一个对象拥有另一个对象

 

8 方法的重载

       同名方法不同参数个数和类型。

       OC中没有方法的重载

9  OC中static关键字。

       static不能修饰实例变量。

       可以在.m文件中作为普通变量使用。只能在本文件中使用。

10 self和super

       self相当于java的this指针 表示当前对象。

      

self应用

谁调用当前方法就指代谁

1) 在对象方法中使用。指代调用当前对象方法的对象。

2) 在类方法中指代当前类。[对象 class]返回当前类(对象)

3) self修饰变量 用以区分实例变量和普通变量

              super 调用父类方法。

11 类的继承和派生

       继承就是子类拥有父类的方法和属性。

       继承的实现

1) 导入父类的头文件

2) 声明子类的时候继承父类

基类和派生类的关系

              派生类可以继承父类(基类)的方法和属性还可以拥有自己的属性和方法。

              注意

1)基类的私有属性不能被继承。

              2)OC中是单继承,一个子类只能继承一个父类。

              3)继承的合理性。可以拥有父子关系。

       方法的重写

子类重新实现父类的方法。不需要声明,已经继承。

 

       继承的注意事项

1) 子类不能定义父类同名变量

2) 单一继承

3) 可以多层继承。

12 实例变量修饰符合作用域

       修饰符

              @public 公有的   任意程序

              @protected 受保护的  同一类或者派生类 子类可以使用

              @private 私有的         同一类中 子类可以继承,不能访问和使用

       修饰符的作用域

声明时(.h):从修饰符出现的地方开始到遇到下一个修饰符或结束。默认为protected。

              实现时(.m):声明的变量都是私有的 不能继承 不能访问。

       私有方法

       .h中没有声明,但是在.m中实现的方法。子类不能继承,不能实现。子类可以通过共有方法调用私有方法。

13 description方法

              NSLog(@”%@”,对象);//打印对象的内容

              实际上调用NSObject类的description方法 打印对象信息。

       重写description方法

-      (NSString *)  description{

NSString *str=@“”;// 可将打印的信息以字符串的形式赋值给str

return   str ;

}

 

14 多态

       多态:某一类事物的多种形态。

       程序中多态:不同的对象以自己的方式响应相同的方法的能力。每个对象都可以有自己的同名方法。

       多态的条件

              有继承关系,有同名方法的重写。   

               基类 * 对象名=[子类 new];//父类的指针指向子类的对象。

       多态的优点

              简化编程借口。容许类和类之间的同名方法。

       多态的实现

1) 基类定义方法并实现(-run())

2) 派生类重写父类的同名方法(-run())

3) 父类指针指向子类对象

基类 * 对象名=[子类 new];

4) 父类指针调用子类方法

[对象名 方法];

       多态的原理

              动态类型可以使直到程序运行时才确定对象所属的类型。

              动态类型绑定能使程序执行时才确定对象调用的实际方法。

              注意

存在多态时,父类可以访问子类特有方法。需要强制类型转换。将父类指针类型转换为子类指针类型。

15 类的本质

              类的本质还是类(类对象)。是另外一个类的对象。

              类对象是一种数据结构,存储的是类的基本信息:类大小,类名,类版本以及消息与函数的映射表。

              类对象代表类。

              class代表类对象,类方法属于类对象。

              Person  *p =[Person]

              p 是Person实例对象

              Person 是class类的类对象

类对象获取

1) 通过实例对象获取

Class  c=[p class];  Person

2) 通过类名对象

Class c =[ Person class];

              类对象的使用

                     可以创建对象Person *p= [c  new]; c可以当Person用

                     可以调用类方法

16类对象的存储

类对象(Person)也在堆区存储。_isa指向代码区。

实例对象(p)_isa 指向类对象的地址。

P指向类对象。

SEL

对方法的包装,表示方法的存储位置。

1) 当实例对象调用方法的时候会把这个方法包装成SEL类型的数据

2) 根据SEL找到对应的方法地址。

3) 根据方法地址调用方法。

使用

Person *p=[Personnew];  // Person类中有方法–eat()

 

SEL  sel =@selectot(eat);

[ p performSelector :sel ]; //响应方法

      

      

 

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值