LHF Objective-C语法(2)类

本文深入探讨了Objective-C与Swift两种编程语言在iOS开发领域的应用,包括它们各自的优势、特点以及如何在实际项目中进行选择与使用。

Fraction.h (分数)

#import <Foundation/Foundation.h>

static int t= 0;
@interface Fraction : NSObject{
	int numerator; //分子
	@public int denominator; //分母
}

-(void) setNumerator:(int) numerator;
-(void) setDenominator:(int) denominator;
-(void) setNumerator:(int) numerator andDenominator:(int) denominator;

-(int) numerator;
-(int) denominator;
-(void) print;
+(void) t;

@end
解释:

1、#import <Foundation/Foundation.h>导入系统头文件    #import "Other.h" 导入普通头文件

2、类变量定义在接口外,类变量只能本类访问

3、花括号里是实例变量  访问修饰符可以是 @public  @protected  @private  

4、默认是@protected  除了实例变量有访问修饰符,其他(类变量,类方法,成员方法)都没有

5、所以方法都是公有的,所以类变量都是私有的

6、- 为成员方法   + 为类方法 

7、大多类方法都是被用来初始化对象的


Fraction.m

//================================================
#import "Fraction.h"

@implementation Fraction
-(void) setNumerator:(int) n{
	numerator = n;
}

-(void) setDenominator:(int) d{
	denominator = d;
}

-(void) setNumerator:(int) n andDenominator:(int) d{
	numerator = n;
	denominator = d;
}

-(int) numerator{
	return numerator;
}

-(int) denominator{
	return denominator;
}

-(void) print{
	NSLog(@"%d/%d",numeraotr,denominator);
}

-(void) m{
	NSLog(@"-m:The class varable t is %d",++t);
}

+(void) t{
	NSLog(@"+t:The class varable t is %d",++t);
}

@end

1、m方法没有在头文件中声明,也可以调用

2、方法的本地变量(参数,方法中定义的变量)改成缩写了,防止重名。在名称冲突情况下,会隐藏实例变量

int main(int argc,const char * argv[]){
	Fraction *frac = [[Fraction alloc] init];
	[frac setNumerator:3 andDenominator:5];
	[frac print];
	NSLog(@"The denominator of Fration is %d\n",frac->denominator);
	[Fraction t];
	[frac m];
	[frac release];
	return 0;
}
1、第5行调用了成员变量denominator(因为是public的) numerator是protected 只能本类,子类访问

2、第6行 调用了类方法,也可以用下边方法调用类方法

[[Fraction class] t];     

Class clazz = [Fraction class];    [clazz t]; clzaa是指针,没有*

3、第7行 m方法,未在头文件中声明,这里也可以调用,相当私有化了

4、第7行 释放了frac 申请的内存空间

5、属性访问器(@property)

//Person.h头文件================================

#import <Foundation/Foundation.h>

@interface Person :NSObject{//创建类

  NSString *name;//属性

 int age;//属性

}

-(void) setName:(NSString*) n;//要吧这3个方法用属性访问器替换掉

-(void) setAge:(int) a;

-(NSString*) name;

-(void) print;

@end

//Person.m实现文件================================

@implementation Person

-(void) setName:(NSString*) n{

        [ n retain];

        [name release];

        [name = n];

}

-(void) setAge:(int) a{

        age = a;

}

-(NSString*) name{

        return name;

}

-(void) print{

        NSLog(@"This is a method...");

}

@end

//main.m================================

int main(int argc,const char * argv[]){

  Person person ;

  person = [[Person alloc] init];

  [person setName:@"Tom"];

 [person setAge:22];

 [person print];

  [person release];

}

用属性访问器,简化上边代码

参考地址:http://skyoceanone.blog.51cto.com/3483859/687268

//Person.h头文件================================

#import <Foundation/Foundation.h>

@interface Person :NSObject{//创建类

  NSString *name;

  int age;//属性

}

@property (retain) NSString* name;//set get方法简化

@property (assign) int age;//set方法简化

-(void) print;

@end

//Person.m实现文件================================

@implementation Person

@synthesize name;

@synthesize age;

-(void) print{

        NSLog(@"This is a method...");

}

@end

//main.m================================

int main(int argc,const char * argv[]){

  Person person ;

  person = [[Person alloc] init];

  person.name=@"Tom";

 person.age = 22;

  [person print];

  [person release];

}

@property(属性访问器类型) 实例变量类型 实例变量

@property(nonatomic,assign) int numerator;

@property float count;  //

@property(nonatomic,assign,getter=isMale) BOOL male;

属性访问器类型

    assign / retain / copy                                普通赋值/带计数器的赋值/拷贝

    readonly /readwrite                                    只读(不生成getter方法)/ 读写

    nonatomic                                                  线程不安全(默认线程安全)

    getter/setter                                                给生成的方法起名

另一个例子:

//旧文件
#import <Foundation/Foundation.h>
#import "Tire.h"
@interface AllWeatherRadial :Tire{
	float rainHanding;	//轮胎气压
	float snowHanding;	//花纹深度
}
-(void) setRainHandling:(float) rainHanding;
-(float) rainHanding;
-(void) setSnowHandling:(float) snowHandling;
-(float) snowHandling;
@end	//AllWeatherRadial
//新文件,简化了代码=======================================
#import <Foundation/Foundation.h>
#import "Tire.h"
@interface AllWeatherRadial :Tire{
	float rainHanding;	
	float snowHanding;	
}
@property float rainHandling;//优化后的setter getter 方法
@property float snowHandling;
@end

#import "AllWeatherRadial.h"
@implementation AllWeatherRadial

-(id) initWithPressure:(float) p treadDepth:(float) td{
	if(self =[super initWithPressure: p
			      treadDepth: td]){
		rainHandling = 23.7;
		snowHandling = 42.5;
	}
	return (self);
}
-(void) setRainHandling:(float) rh{
	rainHandling = rh;
}
-(float)rainHandling{
	return rainHandling;
}
-(void) setSnowHandling:(float)sh{
	snowHandling = sh;
}
-(float) snowHandling{
	return snowHandling
}
-(NSString*) description{
	NSString* desc;
	desc = [[NSString alloc] initWithFormat:
			     @"AllWeatherRadial:%.1f/%.1f/%.1f/%.1f",
		[self pressure],[self treadDepth],
		[self rainHandling],
		[self snowHandling]];
	return desc;
}
@end
//新文件简化了代码
#import "AllWeatherRadial.h"
@implementation AllWeatherRadial

@synthesize rainHandling;
@synthesize snowHandling;

-(id) initWithPressure:(float) p treadDepth:(float) td{
	if(self =[super initWithPressure: p
			      treadDepth: td]){
		rainHandling = 23.7;
		snowHandling = 42.5;
	}
	return (self);
}
-(NSString*) description{
	NSString* desc;
	desc = [[NSString alloc] initWithFormat:
			     @"AllWeatherRadial:%.1f/%.1f/%.1f/%.1f",
		[self pressure],[self treadDepth],
		[self rainHandling],
		[self snowHandling]];
	return desc;
}
@end

//main====================================================
int main(int argc,const char * argv[]){
	Car *car  = [[Car alloc] init];
	int i;
	for(i=0;i<4;i++){
		AllWeatherRadial *tire;
		tire = [[AllWeatherRadial alloc] init];
		[tire setRainHandling:20+i];
		[tire setSnowHandling:28+i];
		NSLog(@"the tire's handling is %.f %.f",
				[tire rainHandling],
				[tire snowHandling]);
		[car setTire:tire atIndex:i];
		[tire release];
	}
	Engine *engine = [[Slant6 alloc] init];
	[car setEngine:engine];
	[car print];
	[car release];
	return 0;
}//main



(Mathcad+Simulink仿真)基于扩展描述函数法的LLC谐振变换器小信号分析设计内容概要:本文围绕“基于扩展描述函数法的LLC谐振变换器小信号分析设计”展开,结合Mathcad与Simulink仿真工具,系统研究LLC谐振变换器的小信号建模方法。重点利用扩展描述函数法(Extended Describing Function Method, EDF)对LLC变换器在非线性工作条件下的动态特性进行线性化近似,建立适用于频域分析的小信号模型,并通过Simulink仿真验证模型准确性。文中详细阐述了建模理论推导过程,包括谐振腔参数计算、开关网络等效处理、工作模态分析及频响特性提取,最后通过仿真对比验证了该方法在稳定性分析与控制器设计中的有效性。; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink和Mathcad工具,从事开关电源、DC-DC变换器或新能源变换系统研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握LLC谐振变换器的小信号建模难点与解决方案;②学习扩展描述函数法在非线性系统线性化中的应用;③实现高频LLC变换器的环路补偿与稳定性设计;④结合Mathcad进行公式推导与参数计算,利用Simulink完成动态仿真验证。; 阅读建议:建议读者结合Mathcad中的数学推导与Simulink仿真模型同步学习,重点关注EDF法的假设条件与适用范围,动手复现建模步骤和频域分析过程,以深入理解LLC变换器的小信号行为及其在实际控制系统设计中的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值