黑马程序员--Object-C常用关键字解析

本文详细解析Objective-C中的关键概念,包括@interface和@implementation用于声明和实现类,点语法的使用,以及@property和@synthesize简化getter和setter的生成。此外,还介绍了@class与#import的区别,强调了@class在避免头文件循环引用时的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

本篇为Objec-C常用关键字的分析

开发工具:Xcode5.1.1

.h声明变量、函数(方法)
.m实现函数(方法)
#import//自动避免重复包含

@interface和@implementation

在O-C中,类的声明和实现是强制分开的。@interface用于类型的声明,有属性、方法、成员变量等。类型的声明以@interface开头,以@end结束,例:

//Student.h
#import <Foundation/Foundation.h>
@interface Student:NSObject
{//大括号里边写成员变量,变量命名前面通常加“_”(因为点语法)
	int _age;
}
-(int) age;//-为动态方法,+为静态方法。-(void)age代表-(void)getAge,常写作-(void)age。这些方法默认都是公共的
-(void) setAge:(int) age;
@end

对应于@interface的类型声明,@implementation是类的实现,同样以@end结束,例:
//Student.m
#import <Foundation/Foundation.h>
@implementation Student
-(int) age{//注意-(void)age后面没有小括号
	return _age;
}


-(int) setAge:(int) age {//该方法方法名为-(int) setAge:
	_age = age ;
}
@end


对象创建
Student stu = [Student alloc];//仅定义,没有初始化
stu = [stu init]//仅初始化

//main.m
#import <Foundation/Foundation.h>
#import "Student.h"//注意不能是Student.m
int main()
{
	Student *stu = [[Student alloc]init];
	[stu setAge:20];
	int age = [stu age];
	NSLog(@"%i",age);
	[stu release];
	return 0;
}

Student stu=[[Student alloc] init];//定义并初始化

定义并初始化还有一种形式:[Student new];但是这种方式没有上面方式层次鲜明,因此常用上面的
[stu setAge:15 andNo:1]


点语法
等号左边相当于调用set方法,等号右边或者没有等号调用get方法

stu.age = 10 ;//相当于调用set方法
int age = stu.age ;//相当于int age = [stu age];

//main.m
#import <Foundation/Foundation.h>
#import "Student.h"//注意不能是Student.m
int main()
{
	Student *stu = [[Student alloc]init];
	stu.age = 20;
	int age = stu.age;
	NSLog(@"%i",age);
	[stu release];
	return 0;
}

@property和@sythesize

@property可以自动生成getter和setter的声明
@interface Person
{
int age;
}
@property int age
@end
相当于


@interface Person
{
int age;
}
-(void)setAge:(int)newAge;
-(int)age;
@end


@sythesize可以自动生成getter和setter的实现。有时要对getter和setter进行具体操作(例return age*10),则需要手动输入。


@implementation Person
@sythesize age;//如果是@sythesize _age,方法也会是set_age和_age。如果@property中未写成员变量,则会自动生成例age的私有变量。
@end
相当于

@implementation Person
-(void)setAge:(int)newAge{
age = newAge ;
}
-(int)age{
return age;
}
@end


@sythesize age = _age ;
相当于
-(void)setAge:(int)age{
_age = age ;
}
-(int)age{
return _age;
}
@sythesize如果手动写了例setAge方法,则自动不会生产setAge方法;如写了age方法,则不会自动生成age方法


当仅写@property时(Xcode4.5或以上版本)
如:
@interface Person
@property int age
@end


@implementation Person
@end
这种情况下,实现文件里相当于@sythesize age = _age


@class

@class和#import

@class Notebook;只是导入Student类,并没有导入该类的方法,也不会导入该类的成员变量(注意:后面有分号);#import "Notebook.h"是拷贝Student.h的所有,包括属性、方法等。
并且,#import不能递归引用,而@class可以,例如
//Reader.h
#import <Foundation/Foundation.h>
//#import "Notebook.h"该写法是错误的
@class Notebook;//该写法是正确的

//Reader.m
#import <Foundation/Foundation.h>
#import "Notebook.h"//在实现方法时要导入头文件

//Notebook.h
#import <Foundation/Foundation.h>
//#import "Reader.h"该写法是错误的

//Notebook.m
#import <Foundation/Foundation.h>
#import "Reader.h"//在实现方法时要导入头文件


@class比#import更节省内存。

内容概要:本文档详细介绍了基于MATLAB实现多目标差分进化(MODE)算法进行无人机三维路径规划的项目实例。项目旨在提升无人机在复杂三维环境中路径规划的精度、实时性、多目标协调处理能力、障碍物避让能力和路径平滑性。通过引入多目标差分进化算法,项目解决了传统路径规划算法在动态环境和多目标优化中的不足,实现了路径长度、飞行安全距离、能耗等多个目标的协调优化。文档涵盖了环境建模、路径编码、多目标优化策略、障碍物检测与避让、路径平滑处理等关键技术模块,并提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,对无人机路径规划和多目标优化算法感兴趣的科研人员、工程师和研究生。 使用场景及目标:①适用于无人机在军事侦察、环境监测、灾害救援、物流运输、城市管理等领域的三维路径规划;②通过多目标差分进化算法,优化路径长度、飞行安全距离、能耗等多目标,提升无人机任务执行效率和安全性;③解决动态环境变化、实时路径调整和复杂障碍物避让等问题。 其他说明:项目采用模块化设计,便于集成不同的优化目标和动态环境因素,支持后续算法升级与功能扩展。通过系统实现和仿真实验验证,项目不仅提升了理论研究的实用价值,还为无人机智能自主飞行提供了技术基础。文档提供了详细的代码示例,有助于读者深入理解和实践该项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值