OC的字符串
void print(NSString *str){
NSLog(@"%@",str);
}
int main() {
@autoreleasepool {
NSLog(@"Hello, World!");
NSString* str1=@"This is a string";
NSLog(@"%@",str1);
NSString* str2;
str2=str1;
str2=@"This is another string";
print(str2);
}
return 0;
}
类与对象(1)
类:是结构体的升级,用于定义变量
1.1关键字
1.2.属性前加下划线
1.3类里面有方法(函数)
1.4 类的变量只能定义在堆上,不能定义在栈上,且不需要 自己释放
1.5 类中的方法被调用时需要使用中括号
1.6 类中的属性不能在类外被操作,需要使用setter赋值,用getter访问对象
2.1 对象是一种特殊的变量
2.2 对象与变量的区别是,对象可以调用类中的方法
2.3 对象也被称为实例。用类定义一个对象,也被称为类的 实例化分割文件,类的声明在.h文件中,类的方法在.m文件中
@interface MyClass :NSObject
{
int _i; //属性前面加下划线
char _ch;
}
-(void)method; //方法声明
-(void)setI:(int)i;
-(int)getI; //一般get省略,直接写I,程序员约定的偷懒方式
-(void)setCh:(char)ch;
-(char)getCh;
@end
@implementation MyClass //类中方法定义,所有类中的方法写到里边
-(void)setI:(int)i
{
_i=i;
}
-(int)getI
{
return _i;
}
-(void)setCh:(char)ch
{
_ch=ch;
}
-(char)getCh
{
return _ch;
}
-(void)method{
NSLog(@"类中的函数被执行了");
}
@end
int main() {
@autoreleasepool {
//OC类的变量不能定义在栈上
MyClass *mc=[MyClass alloc]; //定义对象
[mc method]; //方法调用
[mc setI:20]; //属性赋值,属性需要方法来访问,不能直接访问
int i=[mc getI];
[mc setCh:'a'];
char ch=[mc getCh];
NSLog(@"i=%d,ch=%c",i,ch);
}
return 0;
}
类与对象(2)
- 定义带有多个形参的方法
- 访问权限
2.1 属性(4种)私有,保护,包内,公有
2.2 方法(2种)私有 公有 - 属性:由关键字自动生成的成员变量的声明+settet+getter
//1.定义带有多个形参的方法
-(void)setName:(NSString *)name andAge:(int)age{ //同时修改两个属性的方法
_name=name;
_age=age;
}
-(void)setName:(NSString *)name andAge:(int)age andID:(NSString *)ID andAddress:(NSString *)address{
_name=name;
_age=age;
_ID=ID;
_address=address;
} //同时修改四个属性的方法
//2.访问权限
@interface CZExample : NSObject
{
int _i0; //_i0的访问权限是保护的,默认状态
@public
int _i1; //_i1的访问权限是共有的,一般不建议使用
@package
int _i2; //_i2的访问权限是包内的
@protected
int _i3; //访问权限是保护的
@private
int _i4; //访问权限私有的,作用域在类内。在子类中不能使用
}
-(void)method;
@end
@implementation CZExample
{
int _i5; //在implementation中关键字不起作用吗,定义的属性全部为私有的
}
-(void)method{ //公有方法
[self privateMethod]; //self 调用私有方法
NSLog(@"这是一个公有方法");
}
-(void)privateMethod{ //私有方法,在interface中没有声明,直接写出方法的函数体是属于私有方法
NSLog(@"这是一个私有方法");
}
@end
//3.属性:由关键字自动生成的成员变量的声明+settet+getter
@interface CZFraction3 : NSObject
@property int n; //自动定义_n,并声明定义set,get方法。
@property int d;
@property(readonly) double value; //只读属性
-(void)show;
@end
@implementation CZFraction3
-(double)value{ //从新定义get方法
return self.n*1.0/self.d;
}
-(void)show{
NSLog(@"%d/%d",self.n,self.d);
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
CZFraction3 *f3=[CZFraction3 alloc];
f3.n=8; //调用setter方法
f3.d=10;
[f3 show];
NSLog(@"%lg",f3.value);
}
return 0;
}