#import <Foundation/Foundation.h> //定義一個數據結構 typedef struct myRect { float x ; float y ; float w ; float h ; } //定義的結構體類型 SSRect; int main(int argc, const char * argv[]) { @autoreleasepool { //聲明一個點結構體對象 //對於結構體對象:不加* CGPoint point ; //x類型爲CGFloat //CGFloat類型定義爲double point.x = 10.01; point.y = 20.01; //CGPoint* pPoint = &point ; //定義一個大小結構體對象 //用來描述矩形的長,寬度 CGSize size ; //寬度變量 size.width = 100 ; //高度變量 size.height = 200 ; //定義一個矩形結構體對象 CGRect rect ; //矩形的左上角座標 rect.origin.x = 5 ; rect.origin.y = 6 ; //矩形的寬度和高度 rect.size.width = 100 ; rect.size.height = 200 ; //NSPoint pt ; //將CGPoint類型對象轉化爲NSValue對象 //參數:爲CGPoint或NSPoint類型的對象 NSValue* valuePoint = [NSValue valueWithPoint:point] ; //將CGSize類型對象轉化爲NSValue對象 //valueWithSize:參數爲CGSize NSValue* valueSize = [NSValue valueWithSize:size] ; //將矩形CGRect對象轉化爲NSValue對象 NSValue* valueRect = [NSValue valueWithRect:rect] ; //範圍結構體對象 NSRange range ; //開始位置 range.location = 10 ; //長度 range.length = 20 ; //將NSRange轉化爲NSValue對象 NSValue* valueRange = [NSValue valueWithRange:range] ; //儲存結構體對象數組 NSMutableArray* array = [[NSMutableArray alloc] init] ; //將結構體對象添加到數組中 //Rectangle // [array addObject:valuePoint] ; [array addObject:valueSize] ; [array addObject:valueRect] ; [array addObject:valueRange] ; NSLog(@"1======數組%@",array); //取得數組的第一個對象 id obj = array[0] ; NSValue* vPoint = (NSValue*) obj ; //將NSValue中CGPoint的值轉化爲CGPoint類型取出 CGPoint pt = [vPoint pointValue] ; NSLog(@"pt.x = %f,pt.y = %f",pt.x,pt.y); NSValue* vSize = array[1] ; //獲取size類型 NSSize si = [vSize sizeValue] ; NSValue* vRect = array[2] ; //得到矩形 NSRect rec = [vRect rectValue] ; NSValue* vRange = array[3] ; //得到範圍 NSRange rang = [vRange rangeValue] ; //定義一個自定結構體對象 SSRect myRect ; myRect.x = 10 ; myRect.w = 20 ; myRect.y = 30 ; myRect.h = 40 ; NSValue* myValue = [NSValue valueWithBytes:&myRect objCType:@encode(SSRect)]; [array addObject:myValue] ; NSLog(@"2======數組%@",array); // SSRect rect2 ; [myValue getValue:&rect2] ; NSLog(@"r2.x=%f,r2.y=%f,r2.w=%f,r2.h=%f",rect2.x,rect2.y,rect2.w,rect2.h) ; } return 0; }