oc 点语法 / KVC /readwrite/readonly/
2015-08-27 08:47
316 查看
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
#import "CollegeStudent.h"
#import "Animal.h"
#import "StudentOO.h"
#import "Book.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
/*
//property
Person *person=[[Person alloc]initWithName:@"hiphop" Age:23];
// [person setName:@"miko"];
person.name=@"zhufu"; //[person setName:@"zhufu"];
//只要符合setter和getter这种格式,就可以用点语法,点出来
//.点语法与属性没有半毛钱关系。
//点语法在等号左侧 是setter方法
// 右侧 是getter方法
Student *student=[[Student alloc]init];
student.name=@"wa";
student.gender=@"male";
//
CollegeStudent *cstudent=[CollegeStudent colleageName:@"tian" Age:23 Score:98.8];
//name是只读的。
cstudent.age=12;
cstudent.face=@"笑脸";
//
Animal *monkey=[[Animal alloc]init];
monkey.name=@"tian";
[monkey sayHi];
*/
//点语法
StudentOO *student=[StudentOO studentOOName:@"bella" Gender:@"female" Age:21 Number:39 Score:90];
//初始化对象--开辟空间
Book *bookName=[[Book alloc]init];
bookName.bookname=@"人性的弱点";
student.book=bookName;
//KVC===key-value-coding
StudentOO *student1=[[StudentOO alloc]init];
student1.name=@"";
//forKey
[student1 setValue:@"tijm" forKey:@"name"];
[student1 setValue:@"male" forKey:@"gender"];
//value值 是一个任意对象,记住是对象。
[student1 setValue:@23 forKey:@"age"];
[student1 setValue:@45 forKey:@"number"];
[student1 setValue:@99 forKey:@"score"];
NSLog(@"%@",[student1 valueForKey:@"name"]);
//未定义的,用于排除错误,每当找不到key值的时候会自动调用这两个方法,不写的话会崩溃。
[student1 setValue:@"hehe" forUndefinedKey:@"nian"];
NSLog(@"%@",[student1 valueForUndefinedKey:@"nian"]);
//
bookName.bookname=@"需要独处一处";
//book只是一个Book的类型变量。
//把一个对象赋值给一个没有开辟空间的对象名。
student1.book=bookName;
[student1 setValue:@"花千骨" forKeyPath:@"book.bookname"];
//一次性给多个实例变量赋值
//实例变量存储在字典中,字典的key值必须和实例变量的名字相同。
[student1 setValuesForKeysWithDictionary:@{@"name":@"any",@"gender":@"female",@"age":@"18",@"number":@"34",@"score":@"98",@"book":@"kk"}];
#pragma mark ======使用Block对copy属性的探索
void (^blockCopy)(CollegeStudent *)=^void(CollegeStudent *cstudent){
cstudent.face=@"瓜子脸";
[cstudent release];
};
CollegeStudent *cstudent1=[[CollegeStudent alloc]init];
cstudent1.face=@"臭脸";
blockCopy(cstudent1);
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////
Book.h
///////////////////////////////////////////////////////////////////////////////////////////////
#import <Foundation/Foundation.h>
@interface Book : NSObject
@property(retain) NSString *bookname;
-(NSString *)description;
@end
///////////////////////////////////////////////////////////////////////////////////////////////////
Book.m
///////////////////////////////////////////////////////////////////////////////////////////////
#import "Book.h"
@implementation Book
- (NSString *)description
{
return [NSString stringWithFormat:@"%@", _bookname];
}
@end
///////////////////////////////////////////////////////////////////////////////////////////////
StudentOO.h
///////////////////////////////////////////////////////////////////////////////////////////////
#import <Foundation/Foundation.h>
@class Book;
@interface StudentOO : NSObject
//基本数据类型用assign
//对象类型用retain
//copy现在尽量不用
@property(readwrite,nonatomic,retain) NSString *name;
@property(readwrite,nonatomic,retain) NSString *gender;
@property NSInteger age;
@property NSInteger number;
@property CGFloat score;
//Book对象
@property(retain) Book *book;
-(id)initWithName:(NSString*)name
Gender:(NSString*)gender
Age:(NSInteger)age
Number:(NSInteger)number
Score:(CGFloat)score;
+(id)studentOOName:(NSString*)name
Gender:(NSString*)gender
Age:(NSInteger)age
Number:(NSInteger)number
Score:(CGFloat)score;
-(NSString *)description;
@end
////////////////////////////////////////////////////////////////////////////////////////////////
StudentOO.m
///////////////////////////////////////////////////////////////////////////////////////////////
#import "StudentOO.h"
@implementation StudentOO
-(id)initWithName:(NSString*)name
Gender:(NSString*)gender
Age:(NSInteger)age
Number:(NSInteger)number
Score:(CGFloat)score{
self=[super init];
if (self) {
_name=name;
_gender=gender;
_age=age;
_number=number;
_score=score;
}
return self;
}
+(id)studentOOName:(NSString*)name
Gender:(NSString*)gender
Age:(NSInteger)age
Number:(NSInteger)number
Score:(CGFloat)score{
StudentOO *student=[[StudentOO alloc]initWithName:name Gender:gender Age:age Number:number Score:score];
return student;
}
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{
NSLog(@"%@,%@",key,value);
}
-(id)valueForUndefinedKey:(NSString *)key{
NSLog(@"%@",key);
return @"错误";
}
- (NSString *)description
{
return [NSString stringWithFormat:@"%@,%@,%ld,%ld,%.2f,%@", _name,_gender,_age,_number,_score,_book];
}
@end
///////////////////////////////////////////////////////////////////////////////////////////////
CollegeStudent.h
///////////////////////////////////////////////////////////////////////////////////////////////
#import <Foundation/Foundation.h>
@interface CollegeStudent : NSObject<NSCopying>
{
NSString *_name;
NSInteger _age;
CGFloat _score;
NSString *_gender;
NSString *_facce;
}
-(id)initWithName:(NSString*)name Age:(NSInteger)age Score:(CGFloat)score;
+(id)colleageName:(NSString*)name Age:(NSInteger)age Score:(CGFloat)score;
@property(readonly) NSString *name;
//=============================
//本来property内部是有自己的setter和getter方法的,如果你要(setter=method),就相当于你要走另一个setter方法。
@property(setter=setRR:) CGFloat score;
-(void)setRR:(NSInteger)rr;
-(BOOL)rr;
//==================================
//getter也是一样的道理,但这里的getter的返回值只能使用BOOL型的,说明这个实例变量的类型是BOOL型的。
@property NSInteger age;
//@property(getter=ff) NSString *local;
//-(int)ff;
//记住只能对BOOL型的成员变量使用getter。
@property(getter=rr) NSInteger count;
//===================================================
/*
(1)
readwrite 读写 默认的。编译器声明setter和getter方法。
readonly 只读。编译器只声明getter方法。
setter 给编译器指定stter方法名。setter方法基本不使用,一般不要修改编译器定义的setter方法名。
getter 给编译器指定getter方法名,(getter=method)仅对返回值是BOOL类型的方法执行。
(2)原子特性
atmoic 原子性 -默认的,保证线程安全。-对资源浪费很大。
nonatmoic 非原子性,不保证线程安全。-常用。
(3)语义特性,影响setter方法内部实现,跟内存有关。
assign 基本数据类型 对象类型 默认的。
retain 只能给对象类型。
copy 只能给遵循《NSCoping》协议的对象类型使用。
*/
//原子和语义
@property(readwrite,nonatomic,assign) NSString *nameUpper;
@property(nonatomic,retain) NSString *gender;
@property(nonatomic,copy) NSString *face;
-(NSString *)description;
@end
///////////////////////////////////////////////////////////////////////////////////////////////////
CollegeStudent.m
///////////////////////////////////////////////////////////////////////////////////////////////
#import "CollegeStudent.h"
@implementation CollegeStudent
@synthesize name=_name;
-(id)initWithName:(NSString*)name Age:(NSInteger)age Score:(CGFloat)score{
self=[super init];
if (self) {
_name=name;
_age=age;
_score=score;
}
return self;
}
+(id)colleageName:(NSString*)name Age:(NSInteger)age Score:(CGFloat)score{
CollegeStudent *student=[[CollegeStudent alloc]initWithName:name Age:age Score:score];
return student;
}
//用retain 修饰的属性的setter getter方法
-(void)setGender:(NSString *)gender{
if (_gender !=gender) {
[_gender release];
_gender = gender;
}
}
-(NSString *)gender{
return [[_gender retain] autorerelease];
}
//copy修饰的
-(void)setFace:(NSString *)face{
if (_face != face) {
[_face release];
//拷贝一份给_face,防止内存释放了_face后,第二次使用就会找不到了。
_face=[face copy ];
}
}
@end
///////////////////////////////////////////////////////////////////////////////////////////////
Animal.h
///////////////////////////////////////////////////////////////////////////////////////////////
#import <Foundation/Foundation.h>
@interface Animal : NSObject
@property NSString *name;
@property NSString *color;
-(id)initWithName:(NSString*)name Color:(NSString*)color;
-(void)sayHi;
@end
///////////////////////////////////////////////////////////////////////////////////////////////
Animal.m
///////////////////////////////////////////////////////////////////////////////////////////////
#import "Animal.h"
@implementation Animal
@synthesize name=name;
@synthesize color=color;
-(void)sayHi{
NSLog(@"%@",name);
}
@end
///////////////////////////////////////////////////////////////////////////////////////////////
Student.h
///////////////////////////////////////////////////////////////////////////////////////////////
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
NSString *_name;
NSString *_gender;
}
@property NSString *name;
@property NSString *gender;
-(NSString *)description;
@end
////////////////////////////////////////////////////////////////////////////////////////////////
Student..m
///////////////////////////////////////////////////////////////////////////////////////////////////
#import "Student.h"
@implementation Student
//如果有@synthesize的话,实例变量就必须自己写。
@synthesize name=_name;
@synthesize gender=_gender;
- (NSString *)description
{
return [NSString stringWithFormat:@"%@,%@", _name,_gender];
}
@end
///////////////////////////////////////////////////////////////////////////////////////////////
Person.h
///////////////////////////////////////////////////////////////////////////////////////////////////
#import <Foundation/Foundation.h>
@interface Person : NSObject
//使用@property,系统会自动帮我们补上实例变量name 和 age。
@property NSString *name;//属性
@property NSInteger age;
//{
// NSString *_name;//实例变量
// NSInteger _age;
//}
-(id)initWithName:(NSString*)name Age:(NSInteger)age;
+(id)personName:(NSString*)name Age:(NSInteger)age;
/*
@property 属性的类型 属性的名字
属性的类型:必须跟操作的实例变量一致,决定了setter方法的参数类型,和getter方法的返回值类型。
属性的名字:实例变量去掉下划线,决定了setter方法和getter方法的名字。
property 内部自动实现setter和getter方法。
*/
//-(void)setName:(NSString*)name;
//-(id)name;
//-(void)setAge:(NSInteger)age;
//-(NSInteger)age;
//
-(void)setPage:(NSString*)page;
-(NSString*)page;
-(NSString*)description;
-(BOOL)isKilledOrNot;
@end
///////////////////////////////////////////////////////////////////////////////////////////////////
Person.m
///////////////////////////////////////////////////////////////////////////////////////////////
#import "Person.h"
@implementation Person
-(id)initWithName:(NSString*)name Age:(NSInteger)age{
self=[super init];
if (self) {
_name=name;
_age=age;
}
return self;
}
+(id)personName:(NSString*)name Age:(NSInteger)age{
Person *person=[[Person alloc]initWithName:name Age:age];
return person;
}
//@synthesize 属性名 = 实例变量;
//=右侧 : 决定了实现setter,getter方法时,方法内部使用实例变量。
//属性的实现是默认的,可以不写。
@synthesize name=_name;
@synthesize age=_age;
-(void)setPage:(NSString*)page{
}
-(NSString*)page{
NSString *_page;
return _page;
}
-(NSString*)description{
return [NSString stringWithFormat:@"%@,%ld",_name,_age];
}
-(BOOL)isKilledOrNot{
BOOL result=YES;
return result;
}
@end
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
#import "CollegeStudent.h"
#import "Animal.h"
#import "StudentOO.h"
#import "Book.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
/*
//property
Person *person=[[Person alloc]initWithName:@"hiphop" Age:23];
// [person setName:@"miko"];
person.name=@"zhufu"; //[person setName:@"zhufu"];
//只要符合setter和getter这种格式,就可以用点语法,点出来
//.点语法与属性没有半毛钱关系。
//点语法在等号左侧 是setter方法
// 右侧 是getter方法
Student *student=[[Student alloc]init];
student.name=@"wa";
student.gender=@"male";
//
CollegeStudent *cstudent=[CollegeStudent colleageName:@"tian" Age:23 Score:98.8];
//name是只读的。
cstudent.age=12;
cstudent.face=@"笑脸";
//
Animal *monkey=[[Animal alloc]init];
monkey.name=@"tian";
[monkey sayHi];
*/
//点语法
StudentOO *student=[StudentOO studentOOName:@"bella" Gender:@"female" Age:21 Number:39 Score:90];
//初始化对象--开辟空间
Book *bookName=[[Book alloc]init];
bookName.bookname=@"人性的弱点";
student.book=bookName;
//KVC===key-value-coding
StudentOO *student1=[[StudentOO alloc]init];
student1.name=@"";
//forKey
[student1 setValue:@"tijm" forKey:@"name"];
[student1 setValue:@"male" forKey:@"gender"];
//value值 是一个任意对象,记住是对象。
[student1 setValue:@23 forKey:@"age"];
[student1 setValue:@45 forKey:@"number"];
[student1 setValue:@99 forKey:@"score"];
NSLog(@"%@",[student1 valueForKey:@"name"]);
//未定义的,用于排除错误,每当找不到key值的时候会自动调用这两个方法,不写的话会崩溃。
[student1 setValue:@"hehe" forUndefinedKey:@"nian"];
NSLog(@"%@",[student1 valueForUndefinedKey:@"nian"]);
//
bookName.bookname=@"需要独处一处";
//book只是一个Book的类型变量。
//把一个对象赋值给一个没有开辟空间的对象名。
student1.book=bookName;
[student1 setValue:@"花千骨" forKeyPath:@"book.bookname"];
//一次性给多个实例变量赋值
//实例变量存储在字典中,字典的key值必须和实例变量的名字相同。
[student1 setValuesForKeysWithDictionary:@{@"name":@"any",@"gender":@"female",@"age":@"18",@"number":@"34",@"score":@"98",@"book":@"kk"}];
#pragma mark ======使用Block对copy属性的探索
void (^blockCopy)(CollegeStudent *)=^void(CollegeStudent *cstudent){
cstudent.face=@"瓜子脸";
[cstudent release];
};
CollegeStudent *cstudent1=[[CollegeStudent alloc]init];
cstudent1.face=@"臭脸";
blockCopy(cstudent1);
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////
Book.h
///////////////////////////////////////////////////////////////////////////////////////////////
#import <Foundation/Foundation.h>
@interface Book : NSObject
@property(retain) NSString *bookname;
-(NSString *)description;
@end
///////////////////////////////////////////////////////////////////////////////////////////////////
Book.m
///////////////////////////////////////////////////////////////////////////////////////////////
#import "Book.h"
@implementation Book
- (NSString *)description
{
return [NSString stringWithFormat:@"%@", _bookname];
}
@end
///////////////////////////////////////////////////////////////////////////////////////////////
StudentOO.h
///////////////////////////////////////////////////////////////////////////////////////////////
#import <Foundation/Foundation.h>
@class Book;
@interface StudentOO : NSObject
//基本数据类型用assign
//对象类型用retain
//copy现在尽量不用
@property(readwrite,nonatomic,retain) NSString *name;
@property(readwrite,nonatomic,retain) NSString *gender;
@property NSInteger age;
@property NSInteger number;
@property CGFloat score;
//Book对象
@property(retain) Book *book;
-(id)initWithName:(NSString*)name
Gender:(NSString*)gender
Age:(NSInteger)age
Number:(NSInteger)number
Score:(CGFloat)score;
+(id)studentOOName:(NSString*)name
Gender:(NSString*)gender
Age:(NSInteger)age
Number:(NSInteger)number
Score:(CGFloat)score;
-(NSString *)description;
@end
////////////////////////////////////////////////////////////////////////////////////////////////
StudentOO.m
///////////////////////////////////////////////////////////////////////////////////////////////
#import "StudentOO.h"
@implementation StudentOO
-(id)initWithName:(NSString*)name
Gender:(NSString*)gender
Age:(NSInteger)age
Number:(NSInteger)number
Score:(CGFloat)score{
self=[super init];
if (self) {
_name=name;
_gender=gender;
_age=age;
_number=number;
_score=score;
}
return self;
}
+(id)studentOOName:(NSString*)name
Gender:(NSString*)gender
Age:(NSInteger)age
Number:(NSInteger)number
Score:(CGFloat)score{
StudentOO *student=[[StudentOO alloc]initWithName:name Gender:gender Age:age Number:number Score:score];
return student;
}
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{
NSLog(@"%@,%@",key,value);
}
-(id)valueForUndefinedKey:(NSString *)key{
NSLog(@"%@",key);
return @"错误";
}
- (NSString *)description
{
return [NSString stringWithFormat:@"%@,%@,%ld,%ld,%.2f,%@", _name,_gender,_age,_number,_score,_book];
}
@end
///////////////////////////////////////////////////////////////////////////////////////////////
CollegeStudent.h
///////////////////////////////////////////////////////////////////////////////////////////////
#import <Foundation/Foundation.h>
@interface CollegeStudent : NSObject<NSCopying>
{
NSString *_name;
NSInteger _age;
CGFloat _score;
NSString *_gender;
NSString *_facce;
}
-(id)initWithName:(NSString*)name Age:(NSInteger)age Score:(CGFloat)score;
+(id)colleageName:(NSString*)name Age:(NSInteger)age Score:(CGFloat)score;
@property(readonly) NSString *name;
//=============================
//本来property内部是有自己的setter和getter方法的,如果你要(setter=method),就相当于你要走另一个setter方法。
@property(setter=setRR:) CGFloat score;
-(void)setRR:(NSInteger)rr;
-(BOOL)rr;
//==================================
//getter也是一样的道理,但这里的getter的返回值只能使用BOOL型的,说明这个实例变量的类型是BOOL型的。
@property NSInteger age;
//@property(getter=ff) NSString *local;
//-(int)ff;
//记住只能对BOOL型的成员变量使用getter。
@property(getter=rr) NSInteger count;
//===================================================
/*
(1)
readwrite 读写 默认的。编译器声明setter和getter方法。
readonly 只读。编译器只声明getter方法。
setter 给编译器指定stter方法名。setter方法基本不使用,一般不要修改编译器定义的setter方法名。
getter 给编译器指定getter方法名,(getter=method)仅对返回值是BOOL类型的方法执行。
(2)原子特性
atmoic 原子性 -默认的,保证线程安全。-对资源浪费很大。
nonatmoic 非原子性,不保证线程安全。-常用。
(3)语义特性,影响setter方法内部实现,跟内存有关。
assign 基本数据类型 对象类型 默认的。
retain 只能给对象类型。
copy 只能给遵循《NSCoping》协议的对象类型使用。
*/
//原子和语义
@property(readwrite,nonatomic,assign) NSString *nameUpper;
@property(nonatomic,retain) NSString *gender;
@property(nonatomic,copy) NSString *face;
-(NSString *)description;
@end
///////////////////////////////////////////////////////////////////////////////////////////////////
CollegeStudent.m
///////////////////////////////////////////////////////////////////////////////////////////////
#import "CollegeStudent.h"
@implementation CollegeStudent
@synthesize name=_name;
-(id)initWithName:(NSString*)name Age:(NSInteger)age Score:(CGFloat)score{
self=[super init];
if (self) {
_name=name;
_age=age;
_score=score;
}
return self;
}
+(id)colleageName:(NSString*)name Age:(NSInteger)age Score:(CGFloat)score{
CollegeStudent *student=[[CollegeStudent alloc]initWithName:name Age:age Score:score];
return student;
}
//用retain 修饰的属性的setter getter方法
-(void)setGender:(NSString *)gender{
if (_gender !=gender) {
[_gender release];
_gender = gender;
}
}
-(NSString *)gender{
return [[_gender retain] autorerelease];
}
//copy修饰的
-(void)setFace:(NSString *)face{
if (_face != face) {
[_face release];
//拷贝一份给_face,防止内存释放了_face后,第二次使用就会找不到了。
_face=[face copy ];
}
}
@end
///////////////////////////////////////////////////////////////////////////////////////////////
Animal.h
///////////////////////////////////////////////////////////////////////////////////////////////
#import <Foundation/Foundation.h>
@interface Animal : NSObject
@property NSString *name;
@property NSString *color;
-(id)initWithName:(NSString*)name Color:(NSString*)color;
-(void)sayHi;
@end
///////////////////////////////////////////////////////////////////////////////////////////////
Animal.m
///////////////////////////////////////////////////////////////////////////////////////////////
#import "Animal.h"
@implementation Animal
@synthesize name=name;
@synthesize color=color;
-(void)sayHi{
NSLog(@"%@",name);
}
@end
///////////////////////////////////////////////////////////////////////////////////////////////
Student.h
///////////////////////////////////////////////////////////////////////////////////////////////
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
NSString *_name;
NSString *_gender;
}
@property NSString *name;
@property NSString *gender;
-(NSString *)description;
@end
////////////////////////////////////////////////////////////////////////////////////////////////
Student..m
///////////////////////////////////////////////////////////////////////////////////////////////////
#import "Student.h"
@implementation Student
//如果有@synthesize的话,实例变量就必须自己写。
@synthesize name=_name;
@synthesize gender=_gender;
- (NSString *)description
{
return [NSString stringWithFormat:@"%@,%@", _name,_gender];
}
@end
///////////////////////////////////////////////////////////////////////////////////////////////
Person.h
///////////////////////////////////////////////////////////////////////////////////////////////////
#import <Foundation/Foundation.h>
@interface Person : NSObject
//使用@property,系统会自动帮我们补上实例变量name 和 age。
@property NSString *name;//属性
@property NSInteger age;
//{
// NSString *_name;//实例变量
// NSInteger _age;
//}
-(id)initWithName:(NSString*)name Age:(NSInteger)age;
+(id)personName:(NSString*)name Age:(NSInteger)age;
/*
@property 属性的类型 属性的名字
属性的类型:必须跟操作的实例变量一致,决定了setter方法的参数类型,和getter方法的返回值类型。
属性的名字:实例变量去掉下划线,决定了setter方法和getter方法的名字。
property 内部自动实现setter和getter方法。
*/
//-(void)setName:(NSString*)name;
//-(id)name;
//-(void)setAge:(NSInteger)age;
//-(NSInteger)age;
//
-(void)setPage:(NSString*)page;
-(NSString*)page;
-(NSString*)description;
-(BOOL)isKilledOrNot;
@end
///////////////////////////////////////////////////////////////////////////////////////////////////
Person.m
///////////////////////////////////////////////////////////////////////////////////////////////
#import "Person.h"
@implementation Person
-(id)initWithName:(NSString*)name Age:(NSInteger)age{
self=[super init];
if (self) {
_name=name;
_age=age;
}
return self;
}
+(id)personName:(NSString*)name Age:(NSInteger)age{
Person *person=[[Person alloc]initWithName:name Age:age];
return person;
}
//@synthesize 属性名 = 实例变量;
//=右侧 : 决定了实现setter,getter方法时,方法内部使用实例变量。
//属性的实现是默认的,可以不写。
@synthesize name=_name;
@synthesize age=_age;
-(void)setPage:(NSString*)page{
}
-(NSString*)page{
NSString *_page;
return _page;
}
-(NSString*)description{
return [NSString stringWithFormat:@"%@,%ld",_name,_age];
}
-(BOOL)isKilledOrNot{
BOOL result=YES;
return result;
}
@end
相关文章推荐
- 解决趋势OfficeScan11自动显示隐藏文件等问题
- 黑马程序员--类的声明和实现
- 1068. Find More Coins (30)搜索题
- Access restriction: The type BASE64Encoder is not accessible due to restrict on required library
- HDOJ 1162 Eddy's Picture (最小生成树)
- Java中方法重载时注意点
- HDU 5093 Battle ships(二分图匹配)
- 数组元素是 字符串 类型,并且包含 -等 特殊字符
- Win10正式上市整整一个月时间:最新全球安装量已超7500万
- ATS插件channel_stats源码分析解读
- 【Cactus仙人掌图】仙人掌基础知识学习笔记
- java中i++和++i与c里的区别
- myeclipse8.5破解文档
- 关于C++、PHP和Swoole
- Eclipse常用快捷键
- Office2013 分享
- entity framework 6 通用数据类
- 序列化和反序列化时的注意点
- 移植最新内核Linux4.1.6到TQ2440开发板教程(一)
- 【TCP】超时与重传