কীভাবে অব্যবহৃত পদ্ধতিগুলি সনাক্ত করা যায় এবং উদ্দেশ্য-সি-তে # আমদানি


100

একটি আইফোন অ্যাপ্লিকেশনটিতে দীর্ঘ সময় কাজ করার পরে, আমি বুঝতে পারি যে আমার কোডটি বেশ নোংরা several

আমি জানতে চাই যে কোডগুলির সেই অনর্থক লাইনগুলি সনাক্ত করার কোনও সংকলক নির্দেশিকা বা উপায় আছে কিনা। এটি সনাক্ত করার জন্য কি এক্সকোডের কোনও সরঞ্জাম আছে?

উত্তর:


66

এক্সকোড আপনাকে নির্দিষ্ট সংকলক সতর্কতার জন্য সেটিংস পরীক্ষা করতে (আন) মঞ্জুরি দেয় যা আপনাকে কিছু ধরণের অব্যবহৃত কোড সম্পর্কে সতর্ক করতে পারে। (উত্স তালিকায় প্রকল্পটি নির্বাচন করুন এবং ফাইল> তথ্য পান, তারপরে বিল্ড ট্যাবটি নির্বাচন করুন)) এখানে কয়েকটি (যা আমার জন্য কলং এবং জিসিসি ৪.২ এর জন্য প্রদর্শিত হয়) আগ্রহী হতে পারে:

  • অব্যবহৃত ফাংশন
  • অব্যবহৃত পরামিতি
  • অব্যবহৃত মান

অব্যবহৃত আমদানি শনাক্ত করার জন্য আমি কোনও বিকল্প দেখতে পাচ্ছি না, তবে এটি কিছুটা সহজ - স্বল্প প্রযুক্তির পদ্ধতিরটি কেবল একটি সঙ্কলনের ত্রুটি / সতর্কতা না পাওয়া পর্যন্ত আমদানির বিবৃতিগুলি মন্তব্য করা।

অব্যবহৃত অবজেক্টিভ-সি পদ্ধতিগুলি অব্যবহৃত সি ফাংশনগুলির চেয়ে সনাক্ত করা অনেক বেশি কঠিন কারণ বার্তাগুলি গতিশীলভাবে প্রেরণ করা হয়েছে। একটি সতর্কতা বা ত্রুটি আপনাকে বলতে পারে যে আপনার একটি সম্ভাব্য সমস্যা রয়েছে, তবে একটির অভাব গ্যারান্টি দেয় না যে আপনার রানটাইম ত্রুটি হবে না।


সম্পাদনা: অব্যবহৃত পদ্ধতিগুলি (সম্ভাব্য) সনাক্ত করার আরেকটি ভাল উপায় হ'ল প্রকৃত মৃত্যুদণ্ড থেকে কোড কভারেজ পরীক্ষা করা। এটি স্বয়ংক্রিয়ভাবে ইউনিট টেস্টিংয়ের সাথে প্রায়শই করা হয়, তবে তা হওয়ার দরকার নেই।

এই ব্লগ পোস্টটি এক্সকোড ব্যবহার করে ইউনিট টেস্টিং এবং কোড কভারেজের একটি শালীন ভূমিকা। বিভাগটি gcov(যা কেবলমাত্র জিসিসি দ্বারা উত্পাদিত কোডের সাথে কাজ করে, উপায় দ্বারা) কীভাবে এক্সকোডকে উইন্ডোমেটেড কোড বানাতে হবে তা এটি কতবার কার্যকর করা হয়েছে তা রেকর্ড করতে পারে explains যদি আপনি সিমুলেটারে কোনও স্পিনের জন্য আপনার অ্যাপ্লিকেশনটির একটি চালিত বিল্ড নেন তবে তার উপর gcov চালান, আপনি কভারস্টেরির মতো একটি সরঞ্জাম (মোটামুটি সরল জিইউআই) বা lcov(এইচটিএমএল রিপোর্ট তৈরি করতে পার্ল স্ক্রিপ্ট ) ব্যবহার করে কী কোডটি কার্যকর করা হয়েছিল তা দেখতে পাবেন what ।

আমি ব্যবহার gcovএবং lcovজন্য CHDataStructures.framework এবং স্বত-জেনারেট কভারেজ প্রতিবেদন প্রতিটি SVN পর কমিট। আবার, মনে রাখবেন যে কোডটি "মৃত" কীসের একটি নির্ধারিত পরিমাপ হিসাবে মৃত্যুদন্ড কার্যকর করা কভারেজকে আচরণ করা বুদ্ধিমানের নয়, তবে এটি অবশ্যই আরও পদ্ধতিগুলি চিহ্নিত করতে সহায়তা করতে পারে যা আপনি আরও তদন্ত করতে পারেন।

শেষ অবধি, যেহেতু আপনি মৃত কোডটি সরিয়ে দেওয়ার চেষ্টা করছেন, আমি মনে করি আপনি এই এসও প্রশ্নটি আকর্ষণীয়ও পেয়ে যাবেন:


4
আপনার বক্তব্যটি কী তা আমি নিশ্চিত নই ... স্থির বিশ্লেষক প্রচুর সমস্যা খুঁজে পেতে পারে তবে আপনি যদি টাইপের পরিবর্তে কোনও বার্তা প্রেরণ করেন idবা রানটাইমের সময় কল করার জন্য কোনও নির্বাচক তৈরি করেন তবে স্ট্যাটিক বিশ্লেষক গ্যারান্টি দিতে পারবেন না কোডটি সত্যই অব্যবহৃত। যদি এখনও প্রয়োজনীয় কোডটি অপসারণ করা হয় তবে আপনি রানটাইম ত্রুটি পাবেন। আমি কিছু অনুপস্থিত করছি?
কুইন টেলর

4
তদুপরি, রানটাইমে স্ট্রিংয়ের উপর ভিত্তি করে তৈরি করা নির্বাচকগুলি বেশ সাধারণ।
ড্রিমলাক্স

4
অবশ্যই, এমন কিছু ক্ষেত্রে রয়েছে যেখানে আপনার গতিশীল কোডটি আরও দৃ strongly়ভাবে টাইপ-কাস্ট হয়ে আরও ভাল পরিবেশন করা হতে পারে (যেমন কোনও আইডির পরিবর্তে কিছু ফিরিয়ে দিন)। রানটাইম টাইপিং কোকো / অবজেক্টিভ-সি প্রোগ্রামিংয়ের একটি শক্তিশালী পয়েন্ট, তবে কখনও কখনও রক্ষণাবেক্ষণ এবং পাঠযোগ্যতা শক্তিশালী টাইপিংয়ের বিষয়ে আরও চিন্তাভাবনা করে আরও ভাল পরিবেশিত হবে।
alesplin

4
ওহ, আমি অবশ্যই একমত। আমার থাম্বের নিয়মটি স্থিরভাবে টাইপ করা (যেমন আমি জাভাতে চাই) যদি না আমার সত্যিই গতিশীল টাইপিংয়ের প্রয়োজন হয় যা বিরল তবে উপলক্ষে ঘটে। তবে, কোকো ক্লাসগুলির সাথে কেবল হস্তক্ষেপ করা (উদাহরণস্বরূপ, একটি প্রতিনিধি নির্দিষ্ট করে দেওয়া) এর ফলে হার্ড-টু-ট্রেস গতিশীলতা এবং মৃত্যুদন্ড কার্যকর করা যেতে পারে। হেক, একটি রান লুপ এবং একাধিক থ্রেড সহ যে কোনও প্রোগ্রাম অপ্রয়োজনীয় হতে পারে ...
কুইন টেলর

40

অ্যাপকোডে একটি কোড পরিদর্শন বৈশিষ্ট্য রয়েছে যা অব্যবহৃত আমদানি এবং কোড খুঁজে পায়।


18
সুতরাং, আপনার অর্থ কি এই বৈশিষ্ট্যের জন্য আমাদের অ্যাপকোড ইনস্টল করা উচিত?
mayqiyue

যদি এটি আপনার কাজে লাগে তবে হ্যাঁ!
আরএমপি 251

8

আমরা কিছু স্বজাতীয় রুবি কোড ব্যবহার করছি, এখন ফুই নামক রত্নটিতে বের করা হয়েছে: https://github.com/d block/fui


5

আমি সম্প্রতি অব্যবহৃত (বা সদৃশ) #importবিবৃতিগুলি খুঁজে পেতে একটি স্ক্রিপ্ট লিখেছি : https://gist.github.com/Orangenhain/7691314

স্ক্রিপ্টটি একটি ObjC .m ফাইল নেয় এবং প্রতিটি #importলাইনকে ঘুরে ফিরে মন্তব্য করতে শুরু করে এবং প্রকল্পটি এখনও সংকলন করে কিনা তা দেখতে শুরু করে। আপনাকে BUILD_DIR এবং BUILD_CMD পরিবর্তন করতে হবে।

আপনি যদি findস্ক্রিপ্টটিকে একাধিক ফাইলের উপরে চলতে দিতে কোনও কমান্ড ব্যবহার করছেন , তবে এমন একটি BUILD_CMD ব্যবহার করা নিশ্চিত করুন যা প্রকৃতপক্ষে সমস্ত ফাইল ব্যবহার করে (বা আপনি প্রচুর অব্যবহৃত আমদানির বিবৃতি সহ একটি ফাইল দেখতে পাবেন)।

আমি না জেনে এটি লিখেছিলাম অ্যাপকোডের একটি অনুরূপ বৈশিষ্ট্য রয়েছে, তবে আমি যখন অ্যাপকোড পরীক্ষা করেছি তখন এটি এই স্ক্রিপ্টের মতো পুরোটা নয় (তবে দ্রুত [পুরো প্রকল্পের জন্য]) way


এটি কেবল নকলের জন্য কাজ করছে, অব্যবহৃত আমদানি সরানো হচ্ছে না।
রাহুল

4

ধানদুব যেমন বলেছিলেন, অ্যাপকোড এটি খুব ভাল করে করুন। আমি চেষ্টা করেছি, এবং এটি আমার মাত্র 10 মিনিট সময় নিয়েছে:

যান Code > Optimize Imports..., বা^ + ⌥ + O

এটি কীভাবে করবেন তা বর্ণনা করার জন্য একটি ভিডিও এখানে রয়েছে: অ্যাপকোডে অব্যবহৃত আমদানি এবং পদ্ধতিগুলি সনাক্তকরণ


2

এটি এবং অন্যান্য সমস্যাগুলি খুঁজে পেতে আপনি Xcode বিশ্লেষক ব্যবহার করতে পারেন।

http://help.apple.com/xcode/mac/8.0/#/devb7babe820

এছাড়াও আপনি প্রকল্পটিতে যেতে পারেন এবং বিল্ডটিকে লক্ষ্য করতে এবং বিল্ড সেটিংসের আওতায় পরিবর্তন সতর্কতা পছন্দগুলি যুক্ত করতে পারেন। এই গাইডটি দেখুন:

http://oleb.net/blog/2013/04/compiler-warnings-for-objective-c-developers/


1

সম্প্রতি, আমি কার্বন থেকে কোকোতে একটি বড় প্রকল্প পরিবর্তন করেছি। এর শেষে, বেশ কয়েকটি অনাথ ফাইল রয়েছে যা আর ব্যবহার করা হয়নি। আমি তাদের স্ক্রিপ্ট লিখেছিলাম যা মূলত এটি করেছে:

উত্সটি সমস্ত বিভ্রান্তিতে যাচাই করা হয়েছে কিনা নিশ্চিত করুন (অর্থাত্ পরিষ্কার) নিশ্চিত করুন এটি বর্তমানে ত্রুটি ছাড়াই বিল্ড করেছে (যেমন, এক্সকোডবিল্ড 0 টি স্ট্যাটাস প্রদান করে) তারপরে ডিরেক্টরিতে প্রতিটি উত্স ফাইলের জন্য খালি (অর্থাত্ বিষয়বস্তু সরিয়ে ফেলুন, দৈর্ঘ্যটি কেটে দিন) উত্স এবং শিরোলেখ ফাইল, একটি বিল্ড চেষ্টা করুন, যদি এটি ব্যর্থ হয়, ফাইলগুলিকে রিভার্ট করুন, অন্যথায়, এগুলি খালি রেখে দিন।

এটি চালানোর পরে, পুনরায় ফেরা করুন এবং তারপরে সমস্ত খালি করা ফাইল মুছুন, সংকলন করুন এবং তারপরে সমস্ত ত্রুটিযুক্ত # ইমপোর্টগুলি সরান।

আমারও যোগ করা উচিত, আপনার .xib বা .sdef ফাইলগুলি থেকে রেফারেন্স হওয়া ফাইলগুলি এড়ানো দরকার এবং অন্যান্য ডায়নামিক লিঙ্কিং কেস থাকতে পারে তবে এটি কী মুছে ফেলা যায় তার একটি ভাল নেতৃত্ব আপনাকে দিতে পারে।

একই কৌশলটি ব্যবহার করে কোন # আমদানি মুছে ফেলা যায় - ফাইলটি কেটে ফেলার পরিবর্তে প্রতিটি # আমদানিকে ফাইলের মধ্যে মুছে ফেলুন এবং বিল্ডটি ব্যর্থ হয়েছে কিনা তা দেখুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.