------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. 结构体
在Foundation中定义了很多常用结构体类型来简化我们的日常开发,这些结构体完全采用Objective-C定义,和我们自己定义的结构体没有任何区别,之所以由框架为我们提供完全是为了简化我们的开发。常用的结构体有NSRange、NSPoint、NSSize、NSRect等
//
// Created by 裴涛涛 on 15/5/11.
// Copyright (c) 2015年 裴涛涛. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
CGPoint p1 = NSMakePoint(10, 10);
NSPoint p2 = CGPointMake(20, 20);
NSSize s1 = CGSizeMake(33, 44);
NSSize s2 = NSMakeSize(35, 21);
CGSize s3 = NSMakeSize(90, 80);
CGRect r1 = CGRectMake(0, 0, 20, 84);
NSString *tt = NSStringFromRect(r1);
NSLog(@"%@",tt);
return 0;
}
void range()
{
// NSRange r3 = NSMakeRange(2, 4);
NSString *str = @"i love oc";
NSRange range = [str rangeOfString:@"ptt"];
NSLog(@"loc = %ld, length = %ld",range.location,range.length);
}
不可变字符串
在ObjC中字符串操作要比在C语言中简单的多,在下面的例子中你将看到字符串的初始化、大小写转化、后缀前缀判断、字符串比较、字符串截取、字符串转换等,通过下面的例子我们基本可以掌握常用的字符串操作(注意这些内容虽然基本,但却是十分常用的操作,需要牢记):
可变字符串
我们知道在字符串操作过程中我们经常希望改变原来的字符串,当然这在C语言中实现比较复杂,但是ObjC为我们提供了新的可变字符串类NSMutableString,它是NSString的子类。
3.数组
不可变数组
常用的数组操作:初始化、数组对象的方法执行、数组元素的遍历、在原有数组基础上产生新数组、数组排序等
注意点
NSArray中只能存放对象,不能存放基本数据类型。
数组中的元素后面必须加nil以表示数据结束
// Copyright (c) 2015年 裴涛涛. All rights reserved.可变数组
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
Person *p = [[Person alloc] init];
//
NSArray *array = @[p,@"ptt 5",@"zaixiang"];
// for (int i = 0; i < array.count; i++) {
// NSLog(@"%@",array[i]);
// }
for(id obj in array)
{
NSUInteger i = [array indexOfObject:obj];
NSLog(@"%ld is %@",i,obj);
}
return 0;
}
void test ()
{
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",s6);
}
void test2()
{
[@"ptt\nptt" writeToFile:@"/Users/peitaotao/Desktop/总结.m" atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
NSMutableArray *array = [NSMutableArray array];
[array addObject:[[Person alloc] init]];
[array addObject:@"ptt"];
NSLog(@"%ld",array.count);
return 0;
}
<pre name="code" class="html">#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
<pre name="code" class="html">#import "Person.h"
@implementation Person
@end
<span style="white-space:pre"></span>计算代码行数的练习
<span style="white-space:pre"></span><pre name="code" class="html">// Copyright (c) 2015年 裴涛涛. All rights reserved.///* *考察NSString、NSArray的使用 *NSFileManager */#import <Foundation/Foundation.h>NSUInteger codeLineCount(NSString *path)/* path:文件的全路径(可能是文件夹、也可能是文件) 返回值int:代码行数 */{ //1.获得文件管理者 NSFileManager *mgr = [NSFileManager defaultManager]; //2. 标记是否为文件夹 BOOL dir = NO; //标记这个路径是否存在 BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir]; //如果不存在直接返回0 if(!exist) { NSLog(@"文件路径不存在"); return 0; } if (dir) { // NSLog(@"是个文件夹"); //获得当前文件夹path下面的所有内容(文件、文件夹) NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil]; int count = 0; //遍历数组中的所有子文件(夹)名 for (NSString *filename in array) { //获得子文件(夹)的全路径 NSString *fullPath = [NSString stringWithFormat:@"%@/%@",path,filename]; //NSLog(@"%@",fullPath); count += codeLineCount(fullPath); } return count; // // NSLog(@"%@",array); } else { // NSLog(@"是个文件"); //判断文件的拓展名(忽略大小写) NSString *extension = [[path pathExtension] lowercaseString]; if( ![extension isEqualToString:@"h"] && ![extension isEqualToString:@"m"] && ![extension isEqualToString:@"c"]) { return 0; } //加载文件内容 NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; // NSLog(@"%@",content); //将文件内容分割为每一行 NSArray *array = [content componentsSeparatedByString:@"\n" ]; //打印文件路径和行数 NSLog(@"%@----%d",path,array.count); return array.count; } /* int i = 0; for (NSString *line in array) { NSLog(@"%d++++++%@",i,line); i++; } */}int main(int argc, const char * argv[]) { int count = codeLineCount(@"/Users/peitaotao/Desktop"); NSLog(@"%d",count); return 0;}