iOS开发-小白进阶-iOS中的类

Objective-C类的接口与实现详解
本文深入解析了Objective-C中的.h文件和.m文件,详细介绍了类接口、实例变量、方法声明及实现,以及@synthesize关键字的作用。文章还对比了不同形式的变量使用和私有与公共成员的区别。
.h文件
@interface MyTest : NSObject{
         NSString * _testName;
}
- (void) initName:(NSString *) newName;
@end

@interface MyTest告诉编译器这是一个新类“MyTest”的接口,而NSObject则表示每个MyTest类都是一个NSObject,并且每个类都将继承NSObject类的所有行为。

大括号中内容就是这个MyTest类中的元素。也就是这个类的数据成员。testName也称为MyTest类的实例变量。接下来-(void) initName:(NSString *)newName; 这看起来有点像C++中的函数原型,在objective-C中我们称为方法声明.  它列出了每个方法的名称,返回值的类型,跟参数。

- (void) initName:(NSString *)newName;
“-” 是Objective-C 方法的声明 也有“+” 那么“-”,“+”是什么意思,如果学过C++就会知道在C++中有个static方法(静态方法)。这个“+”号代表的意思就跟C++中静态方法是一样的。(void)代表的就是函数的返回值,  initName就代表着这个函数的名字 ,冒号后面就是要传入的参数。(NSString*)就代表着你要传入的参数是一个字符串 。

在Objective-C中有一种名为“中缀符”的语法方式。方法的名称及其参数都是合在一起的。例如:

[MyTest  initName:@“xiaobai”];</span>

但是需要注意的是“:”的使用,如果你的方法是不带参数的那么不需要冒号,反之需要。很有可能我们在写程序的时候因为这一个冒号而绞尽脑汁。

@end 告诉编译器我们完成了这个类的声明。

@interface部分是用于定义类的公共接口。通常接口也叫API。

.m文件

@interface MyTest()
@property (strong)NSString *sex;
@end

@implementation MyTest
 -(void)  initName : (NSString *)newName{
        _testName = newName;
}<pre name="code" class="objc">@interface MyTest : NSObject{
      NSString * test;
}
@propery (nonatomic, copy) NSString *test;
@end

@implementation MyTest
@synthe test;
@end;

-(void) initName : (NSString *)newSex{ _sex = newSex;}@end



@interface部分我们叫接口,而真正使对象能够运行的代码位于.m文件中。

@implementation 是一个编译器命令表明你将要为这个类提供代码。类名出线在@implement之后。

接下来我们要实现.h文件中的方法,甚至我们可以定义并实现那些@interface中没有实现过的方法。那么那些没有在@interface时给谁用的呢。在c++中有私有方法跟保护方法你可以理解为在@interface中的是公共的而在@imolementation定义的变量跟方法则是私有的。也就是说.h中的变量跟方法任何人都可以使用,而在.m文件中只能是自己来使用。

下划线"_"与self

第一种形式

@interface MyTest : NSObject{
      NSString * _test;
}
@propery (nonatomic, copy) NSString *test;
@end
@implementation MyTest
@synthesize test = _test;
@end;

第二种形式

@interface MyTest : NSObject
@propery (nonatomic, copy) NSString *test;
@end

关于@synthesize在上篇博客中已经说了,那么久在复习一遍顺便在加一点这俩天一些新感悟。

  1. 在没有引进arc以前我们需要使用@synthesize  test;系统将不会自动生成实例变量“_test”,直接通过变量名test,也就是直接使用变量名在赋值运算的时候,只是将内存区域的指针复制给变量,相当于assgin。如果是通过点语法“self.test=”则是走属性生成方法,也就是在@property中定义的属性。如果没有属性则默认是assgin。
  2. 如果没有写@synthesize,系统会自动生成一个默认的加“_”的成员变量(即使是变量名中已经有一个“_”);
  3. @synthesize 以前可能都看到过 @syjnthesize test = _test; @synthsize test;  可能也会有像我一样刚入门没有接触过的,那么我感觉以后我们只需要只需要尽量去使用属性变量就可以,因为系统会为我们做好一切。
  4. 也许大家也可能看见过这样的代码
    <span style="font-size:14px;">self.btn1 =[[UIButton alloc] init];
    
    _btn1 = [[UIButton aaloc] init];
    </span><span style="font-size:12px;">
    </span>
    那究竟有什么区别也就是第一条所说的self.btn1 走的是属性方法,但是走的是什么属性方法还是要看自己定义的属性。而_btn则是直接调用变量名为_btn1的指针队成员变量直接赋值相当于assgin。
  5. 对于大括号里的成员变量我们可以用self->_test来调用。(但是我没见过这么来用的)。
个人总结
感觉arc跟类成员这俩快联系其实挺多的。感觉自己的理解有的想表达可能表达的不是很清楚,也欢迎大街一起讨论。本人也是刚接触iOS希望大家能一起学习进步。


在车辆工程中,悬架系统的性能评估和优化一直是研究的热点。悬架不仅关乎车辆的乘坐舒适性,还直接影响到车辆的操控性和稳定性。为了深入理解悬架的动态行为,研究人员经常使用“二自由度悬架模型”来简化分析,并运用“传递函数”这一数学工具来描述悬架系统的动态特性。 二自由度悬架模型将复杂的车辆系统简化为两个独立的部分:车轮和车身。这种简化模型能够较准确地模拟出车辆在垂直方向上的运动行为,同时忽略了侧向和纵向的动态影响,这使得工程师能够更加专注于分析与优化与垂直动态相关的性能指标。 传递函数作为控制系统理论中的一种工具,能够描述系统输入和输出之间的关系。在悬架系统中,传递函数特别重要,因为它能够反映出路面不平度如何被悬架系统转化为车内乘员感受到的振动。通过传递函数,我们可以得到一个频率域上的表达式,从中分析出悬架系统的关键动态特性,如系统的振幅衰减特性和共振频率等。 在实际应用中,工程师通过使用MATLAB这数学软件,建立双质量悬架的数学模型。模型中的参数包括车轮质量、车身质量、弹簧刚度以及阻尼系数等。通过编程求解,工程师可以得到悬架系统的传递函数,并据此绘制出传递函数曲线。这为评估悬架性能提供了一个直观的工具,使工程师能够了解悬架在不同频率激励下的响应情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值