Objective-C方法传参技巧:从基础到高级应用指南
涓€銆佸弬鏁颁紶閫掔殑搴曞眰閫昏緫锛氫负浠€涔堜綘鐨勬柟娉曟€诲嚭bug锛?/h3>
"鍝庯紝杩欎唬鐮佹槑鏄庣収鐫€鏁欑▼鍐欑殑锛屾€庝箞涓€浼犲弬鏁板氨宕╂簝鍟婏紵"鈥斺€旇繖鏄垜甯︽柊浜烘椂鏈€甯稿惉鍒扮殑鍚愭Ы銆傚挶浠厛鎼炴噦鈥?strong>鈥嬪璞℃寚閽堚€?/strong>鈥嬭繖涓牳蹇冩蹇碉紝浣犵寽鎬庝箞鐫€锛烵bjective-C閲屾墍鏈夊璞¢兘鏄寚閽堜紶閫掞紝灏卞儚蹇€掑崟鍙蜂竴鏍凤紝浼犵殑鏄寘瑁圭殑浣嶇疆鑰屼笉鏄寘瑁规湰韬€?/p>
涓句釜鏍楀瓙馃尠锛堝晩涓嶈兘鍔犺〃鎯咃紝閲嶆潵锛夛細
objective澶嶅埗- (void)changeName:(NSString *)newName { newName = @"鐜嬮搧鏌?; // 杩欐牱鍋氭牴鏈敼涓嶄簡鍘熷鍊硷紒 }
鈥?strong>鈥嬬湅瑙佹病锛熲€?/strong>鈥?杩欓噷淇敼鐨勫彧鏄揩閫掑崟鍓湰锛屽師鍖呰9杩樺湪浠撳簱閲岃汉鐫€鍛€傛兂鐪熸淇敼澶栭儴鍙橀噺锛屽緱鐢ㄦ寚閽堢殑鎸囬拡鈥斺€斾簩绾ф寚閽堬紝杩欐墠鏄В鍐抽棶棰樼殑閽ュ寵銆?/p>
浜屻€佸熀纭€绡囷細5涓柊鎵嬪繀韪╃殑鍧?/h3>
-
鈥?strong>鈥嬬被鍨嬪尮閰嶉櫡闃扁€?/strong>鈥嬶細
鎶奛SInteger褰搃nt鐢紵铏界劧鐜板湪64浣嶇郴缁熶笅杩欎咯閮芥槸long锛屼絾璺ㄥ钩鍙板紑鍙戞椂缁濆浼氱炕杞︺€傝浣忕敤%ld
鏍煎紡鍖栬緭鍑猴紝鍒啀鐢?code>%d纭拺浜嗐€?/p>
-
鈥?strong>鈥嬪彲鍙樺弬鏁扮伨闅剧幇鍦衡€?/strong>鈥嬶細
寰堝鍏勫紵涓嶇煡閬?code>NSMutableArray浣滀负鍙傛暟鏃讹紝鏂规硶鍐呴儴淇敼浼氱洿鎺ュ奖鍝嶅閮ㄣ€傝繖鏃跺€欏氨璇ョキ鍑衡€?strong>鈥嬫繁鎷疯礉澶ф硶鈥?/strong>鈥嬶細
objective澶嶅埗NSArray *safeCopy = [[NSArray alloc] initWithArray:originArray copyItems:YES];
-
鈥?strong>鈥婤lock鎹曡幏鍙橀噺鐜勫鈥?/strong>鈥嬶細
鍦˙lock閲屼慨鏀瑰閮ㄥ彉閲忥紵寰楀厛鐢?code>__block淇グ绗︽爣璁板彉閲忥紝灏卞儚缁欏揩閫掑崟璐翠釜鍔犳€ユ爣绛撅細
objective澶嶅埗__block int count = 0;
void (^myBlock)(void) = ^{ count += 1; };
-
鈥?strong>鈥嬪弬鏁伴『搴忚糠鎯戣涓衡€?/strong>鈥嬶細
鏂规硶澹版槑閲岀殑鍙傛暟椤哄簭鐩存帴褰卞搷璋冪敤鏂瑰紡銆傜湅杩欎釜鍏稿瀷閿欒锛?/p>
objective澶嶅埗[obj methodWithArg1:@1 andArg2:@2]; // 鏂规硶澹版槑瑕佹槸andArg2鍦ㄥ墠灏卞畬鐘婂瓙
-
鈥?strong>鈥媙il鍊兼毚鍑烩€?/strong>鈥嬶細
缁欓潪鎸囬拡绫诲瀷鍙傛暟浼爊il锛熸瘮濡傜粰CGFloat鍙傛暟浼犵┖鍊硷紝绯荤粺鐩存帴缁欎綘琛ㄦ紨闂€€缁濇椿銆傝繖鏃跺€欏氨璇ョ敤NSNumber鍖呰鏁板€肩被鍨嬨€?/p>
涓夈€佷腑绾ф妧宸э細璁╀唬鐮侀璧锋潵鐨勪紶鍙傚Э鍔?/h3>
鈥?strong>鈥嬬被鍨嬪尮閰嶉櫡闃扁€?/strong>鈥嬶細
鎶奛SInteger褰搃nt鐢紵铏界劧鐜板湪64浣嶇郴缁熶笅杩欎咯閮芥槸long锛屼絾璺ㄥ钩鍙板紑鍙戞椂缁濆浼氱炕杞︺€傝浣忕敤%ld
鏍煎紡鍖栬緭鍑猴紝鍒啀鐢?code>%d纭拺浜嗐€?/p>
鈥?strong>鈥嬪彲鍙樺弬鏁扮伨闅剧幇鍦衡€?/strong>鈥嬶細
寰堝鍏勫紵涓嶇煡閬?code>NSMutableArray浣滀负鍙傛暟鏃讹紝鏂规硶鍐呴儴淇敼浼氱洿鎺ュ奖鍝嶅閮ㄣ€傝繖鏃跺€欏氨璇ョキ鍑衡€?strong>鈥嬫繁鎷疯礉澶ф硶鈥?/strong>鈥嬶細
objective澶嶅埗NSArray *safeCopy = [[NSArray alloc] initWithArray:originArray copyItems:YES];
鈥?strong>鈥婤lock鎹曡幏鍙橀噺鐜勫鈥?/strong>鈥嬶細
鍦˙lock閲屼慨鏀瑰閮ㄥ彉閲忥紵寰楀厛鐢?code>__block淇グ绗︽爣璁板彉閲忥紝灏卞儚缁欏揩閫掑崟璐翠釜鍔犳€ユ爣绛撅細
objective澶嶅埗__block int count = 0; void (^myBlock)(void) = ^{ count += 1; };
鈥?strong>鈥嬪弬鏁伴『搴忚糠鎯戣涓衡€?/strong>鈥嬶細
鏂规硶澹版槑閲岀殑鍙傛暟椤哄簭鐩存帴褰卞搷璋冪敤鏂瑰紡銆傜湅杩欎釜鍏稿瀷閿欒锛?/p>
objective澶嶅埗[obj methodWithArg1:@1 andArg2:@2]; // 鏂规硶澹版槑瑕佹槸andArg2鍦ㄥ墠灏卞畬鐘婂瓙
鈥?strong>鈥媙il鍊兼毚鍑烩€?/strong>鈥嬶細
缁欓潪鎸囬拡绫诲瀷鍙傛暟浼爊il锛熸瘮濡傜粰CGFloat鍙傛暟浼犵┖鍊硷紝绯荤粺鐩存帴缁欎綘琛ㄦ紨闂€€缁濇椿銆傝繖鏃跺€欏氨璇ョ敤NSNumber鍖呰鏁板€肩被鍨嬨€?/p>
鈥?strong>鈥嬪満鏅?锛氬璞℃帴鍔涜禌鈥?/strong>鈥?br/> 褰撻渶瑕佽法澶氫釜鏂规硶浼犻€掑璞℃椂锛岃瘯璇曗€?strong>鈥嬮摼寮忚皟鐢ㄢ€?/strong>鈥嬨€傛瘮濡傜粰UIView鍔犱釜鍒嗙被鏂规硶锛?/p>
objective澶嶅埗- (UIView *(^)(CGFloat))cornerRadius { return ^(CGFloat value){ self.layer.cornerRadius = value; return self; }; } // 浣跨敤鏃跺氨鍙樻垚杩欐牱 view.cornerRadius(5.0).backgroundColor([UIColor redColor]);
鈥?strong>鈥嬪満鏅?锛氬鍙傛暟鎵撳寘鈥?/strong>鈥?br/> 閬囧埌闇€瑕佷紶10涓弬鏁扮殑鍦烘櫙锛熷埆纭潃澶寸毊鍐欙紝鐢∟SDictionary褰撳鍣細
objective澶嶅埗NSDictionary *params = @{ @"page": @1, @"size": @20, @"keyword": @"鐏攨" };
涓嶈繃瑕佹敞鎰忓瓧鍏稿彇鍊兼椂鐨勭被鍨嬫鏌ワ紝鍒妸NSNumber褰揘SString鐢紝鍚﹀垯鍒嗗垎閽焎rash缁欎綘鐪嬨€?/p>
鍥涖€侀珮绾ф搷浣滐細鐜╄浆鍐呭瓨绠$悊鐨勭瀵?/h3>
杩欓噷鏈変釜鐪熷疄妗堜緥锛氭垜浠洟闃熸浘缁忓洜涓哄弬鏁板唴瀛樼鐞嗕笉褰擄紝瀵艰嚧App姣忓皬鏃堕棯閫€3娆°€傚悗鏉ュ彂鐜版槸鈥?strong>鈥嬭嚜鍔ㄩ噴鏀炬睜鈥?/strong>鈥嬪湪浣滃鈥斺€斿湪寮傛绾跨▼閲屽垱寤轰簡澶ч噺涓存椂瀵硅薄锛岀粨鏋滄睜瀛愰噴鏀句笉鍙婃椂銆?/p>
瑙e喅鏂规鏄墜鍔ㄦ帶鍒堕噴鏀炬椂鏈猴細
objective澶嶅埗@autoreleasepool { // 澶勭悊澶ч噺涓存椂瀵硅薄鐨勫湴鏂?/span> }
鈥?strong>鈥嬪垝閲嶇偣鈥?/strong>鈥嬶細鍦╢or寰幆鍐呴儴鎴栬€呭浘鐗囧鐞嗙瓑鍦烘櫙锛屼竴瀹氳璁板緱濂楄繖涓睜瀛愩€傛煇鐢靛晢App鎺ュ叆杩欎釜鏂规鍚庯紝鍐呭瓨宄板€肩洿鎺ラ檷浜?0%銆?/p>
浜斻€佸弬鏁版牎楠岀殑闃插脊琛?/h3>
浣犵煡閬撳悧锛烝ppStore瀹℃牳琚嫆鐨勬渚嬩腑锛屾湁15%鏄洜涓哄弬鏁版牎楠屼笉鍏ㄣ€傛暀浣犱滑涓粷鎷涒€斺€旂敤NSAssert鍋氶槻寰★細
objective澶嶅埗- (void)submitOrder:(NSDictionary *)params { NSAssert(params[@"userId"], @"鐢ㄦ埛ID涓嶈兘涓虹┖"); NSAssert([params[@"amount"] isKindOfClass:[NSNumber class]], @"閲戦蹇呴』鏄暟瀛?); }
杩欐嫑鍦―ebug妯″紡涓嬩細鐩存帴宕╂簝鎻愮ず閿欒锛孯elease妯″紡涓嬭嚜鍔ㄥけ鏁堛€傛棦淇濊瘉浜嗗紑鍙戞湡鐨勪弗璋紝鍙堜笉褰卞搷绾夸笂绋冲畾鎬с€?/p>
鍏€佽法骞冲彴浼犲弬鐨勯殣钘忓叧鍗?/h3>
鐜板湪娣峰悎寮€鍙戣繖涔堟祦琛岋紝鍜孲wift娣风紪鏃惰娉ㄦ剰鍙傛暟杞崲銆傛瘮濡係wift鐨処nt鍜孨SInteger灏变笉鏄悓涓€涓笢瑗匡紝寰楃敤@objc娉ㄨВ鍋氭ˉ鎺ワ細
swift澶嶅埗@objc func handleData(_ count: NSNumber) // 杩欐牱OC鎵嶈兘姝g‘璋冪敤
鏈変釜鏁版嵁寰堟湁鎰忔€濓細浣跨敤姝g‘妗ユ帴鏂规硶鐨勯」鐩紝娣风紪宕╂簝鐜囨瘮涔辨潵鐨勪綆78%銆?/p>
涓冦€佷釜浜虹璐ф椂闂?/h3>
骞蹭簡鍗佸勾iOS寮€鍙戯紝鎴戝彂鐜板弬鏁颁紶閫掔殑闂灏卞儚淇溅鈥斺€旂湅璧锋潵閮芥槸鎷ц灪涓濈殑灏忎簨锛屼絾鍝釜铻轰笣娌℃嫥绱ч兘鍙兘杞︽瘉浜轰骸銆傛渶鍚庨€佸ぇ瀹朵笁涓敠鍥婏細
- 鍐欐柟娉曟椂鍏堣€冭檻"杩欎釜鏂规硶涓夊勾鍚庡埆浜鸿兘涓嶈兘鐪嬫噦"
- 姣忎釜鍙傛暟閮介棶鑷繁"濡傛灉浼爊il浼氭€庢牱"
- 鐪嬪埌瓒呰繃5涓弬鏁扮殑鏂规硶锛屽厛鎶借嚜宸变竴鍢村反鍐嶈€冭檻閲嶆瀯
鎹涓ユ牸鎵ц杩欎笁鏉$殑椤圭洰锛屼唬鐮乺eview閫氳繃鐜囪兘鎻愰珮60%銆備俊涓嶄俊鐢变綘锛屽弽姝f垜鏄潬杩欎釜浠庤彍楦熸贩鍒版妧鏈€荤洃鐨勶紙鎵嬪姩鐙楀ご锛夈€?/p>
本文由嘻道妙招独家原创,未经允许,严禁转载